C++ 从向量中删除元素是否也会删除元素中存在的所有成员向量?
我正在使用C++ 从向量中删除元素是否也会删除元素中存在的所有成员向量?,c++,memory,stdvector,C++,Memory,Stdvector,我正在使用erase和remove\u if有条件地从对象(AnObjects)的向量实例(AVector)中删除元素 在我的场景中,一个对象有一个另一个向量(属于另一个对象s)作为其成员变量之一。我想删除另一个向量大小为0的任何对象。 注:BVector是另一个AnObjects的向量条件_1是一个谓词 // Copy elements from BVector to AVector based on a condition for (int i = 0; i < BVector
erase
和remove\u if
有条件地从对象(AnObject
s)的向量实例(AVector
)中删除元素
在我的场景中,一个对象
有一个另一个向量
(属于另一个对象
s)作为其成员变量之一。我想删除另一个向量大小为0的任何对象。
注:BVector
是另一个AnObject
s的向量<代码>条件_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());
//根据条件将元素从BVector复制到AVector
对于(int i=0;i //std::coutcond_trim
应该接受集合的元素,而不是集合本身,即类型为对象的对象,而不是Avector
您使用的是另一个向量的结束迭代器。请用a回答您的问题,或者您发布的代码对我来说很好(在填写缺失的部分后)AnObject temp=AnObject();
不要这样做。只需编写AnObject temp;
不要添加“更多代码”;按照已经指示的方式呈现您的代码。这可能是示例中的一个输入错误,因为它甚至不应该编译(除非AVector从AnObject继承)。