从向量中删除元素是否也会擦除元素中存在的所有成员向量?

时间:2017-05-15 14:03:22

标签: c++ memory stdvector

我使用AVectorAnObject有条件地从对象(erase)的矢量实例(remove_if)中删除元素。

在我的方案中,AnObject有一个AnothervectorAnotherobject s)作为其成员变量之一。我想删除Anothervector大小为0的任何AnObject。 注意:BVectorAnObject 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)。

1 个答案:

答案 0 :(得分:1)

cond_trim应该接受集合的元素,而不是集合本身,即AnObject类型的对象,而不是Avector