Прежде всего, было бы неплохо следовать принципу «Не повторяйся» и написать функцию сравнения для будущего использования:
auto compare_parts = [](const Part& p1, const Part& p2) -> bool {
return ( (p1.getEdges() == p2.getEdges())
and (p1.getFaces() == p2.getFaces())
and (p1.getShells() == p2.getShells())
and (p1.getVertices() == p2.getVertices())
and (p1.getWires() == p2.getWires()) );
}
Вы переписали бы первый цикл, используя его, и увидели бы, насколько более простым он выглядит.
Тогда почему бы не использовать встроенные в c ++ методы для удаления элементов из списка с помощью функции, которую мы написали? Это использует новую функцию в c ++ под названием параметры привязки , которая поможет нам здесь
#include <functional>
using namespace std::placeholders;
for (auto&& badPart : toRemove) {
auto isBad = std::bind(compare_parts, badPart, _1);
step.getSubParts().remove_if(isBad);
}
И вот как вы удаляете специальные записи из списка.