Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从向量中删除元素是否也会删除元素中存在的所有成员向量?_C++_Memory_Stdvector - Fatal编程技术网

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::cout
cond_trim
应该接受集合的元素,而不是集合本身,即类型为
对象的对象,而不是
Avector

您使用的是另一个向量的结束迭代器。请用a回答您的问题,或者您发布的代码对我来说很好(在填写缺失的部分后)
AnObject temp=AnObject();
不要这样做。只需编写
AnObject temp;
不要添加“更多代码”;按照已经指示的方式呈现您的代码。这可能是示例中的一个输入错误,因为它甚至不应该编译(除非AVector从AnObject继承)。