我使用AVector
和AnObject
有条件地从对象(erase
)的矢量实例(remove_if
)中删除元素。
在我的方案中,AnObject
有一个Anothervector
(Anotherobject
s)作为其成员变量之一。我想删除Anothervector
大小为0的任何AnObject。
注意:BVector
是AnObject
s的另一个向量。 condition_1
是谓词。
// Copy elements from BVector to AVector based on a condition
for (int i = 0; i < BVector.size(); i++)
{
AnObject temp;
AVector.push_back(temp);
std::copy_if(BVector.at(i).getVector().begin(), BVector.at(i).getVector().end(), back_inserter(AVector.at(i).getVector()), condition_1);
}
// Trim the AVector by removing AnObjects with Anothervector of size 0
auto const cond_trim = [](AnObject& anobj)
{
// std::cout << "Size is " << anobj.getVector().size();
return anobj.getVector().size() == 0;
};
std::vector<Anotherobject>& AnObject::getVector()
{
return Anothervector;
}
auto iter = std::remove_if(AVector.begin(), AVector.end(), cond_trim);
AVector.erase(iter, AVector.end());
更新
发现错误 - 删除AnObject
中的对象(AVector
)并未删除成员向量(Anothervector
)。
答案 0 :(得分:1)
cond_trim
应该接受集合的元素,而不是集合本身,即AnObject
类型的对象,而不是Avector
。