C++ 向量大小在删除c++;
我有一个向量类C++ 向量大小在删除c++;,c++,vector,C++,Vector,我有一个向量类vector myVector在myVector之后。向后推(*数据)被调用了10次,我试图删除vector类。初始尺寸显示为10。 删除后,cout的大小仍然为10。我不是在删除它吗 cout << myVector.size(); // myVector.size() = 10 if(myVector.size() > 0){ for (vector<VectorClass*>::iterator it = myVector.begin()
vector myVector代码>在myVector之后。向后推(*数据)代码>被调用了10次,我试图删除vector类。初始尺寸显示为10。
删除后,cout的大小仍然为10。我不是在删除它吗
cout << myVector.size(); // myVector.size() = 10
if(myVector.size() > 0){
for (vector<VectorClass*>::iterator it = myVector.begin() ; it != myVector.end(); ++it){
*it = 0;
delete[] *it;
}
}
cout << myVector.size(); // myVector.size() = 10
cout 0){
对于(vector::iterator it=myVector.begin();it!=myVector.end();++it){
*它=0;
删除[]*它;
}
}
cout删除向量元素的内容不会减小向量的大小,但您甚至没有正确删除内容,因为您将null
分配给每个指针,然后使用delete[]
,因此不会发生任何事情
删除*it=0代码>在删除之前(可能放在删除之后,不重要),然后删除每个元素内容,循环完成使用myVector.clear()
清除向量并将大小设置为零。您正在尝试*)
删除向量中的每个元素,但不删除向量中的指针。除非向量即将超出范围,否则应在此操作后清空向量。您的代码也可以简化一点。替换此项:
if(myVector.size() > 0){
for (vector<VectorClass*>::iterator it = myVector.begin() ; it != myVector.end(); ++it){
*it = 0;
delete[] *it;
}
}
还请注意,如果为每个元素分配了new[]
,则只应使用delete[]
。如果分配了new
,则应使用delete
并且,如果您分配了<代码>新< /代码>,则应该考虑将向量声明为<代码>向量Myvector;code>这样就不需要手动
删除每个元素
*)
我说您正在尝试删除每个元素,因为在对每个元素使用delete[]
之前,您为每个元素分配了一个空指针。这使得delete[]
毫无意义。是否确实要删除向量的所有元素?然后使用清除的建议解决方案就可以了
如果只想删除某些元素,则需要使用std::vector::erase
。另请参见是否确实需要销毁向量中的对象?或者是你试图破坏向量本身,而元素一开始就不是动态分配的?不确定为什么是downvote,这是一种错误的方法吗?有人能澄清一下吗?我认为你说的是对的。不知道为什么投了反对票。操作代码中没有删除任何内容<代码>*it=0;删除[]*它代码>是delete[]nullptr
@S.M.嗯,我没看到!谢谢你指出,既然OP询问了向量的大小,那么这是否会使这个答案无效呢?如果是,请告诉我删除我的答案。一般来说,你的答案是可以的,我没有投反对票。我想提醒你关于删除向量元素的不正确的OP方法,所以你可以更新你的答案。OP代码中没有任何内容被删除<代码>*it=0;删除[]*它代码>是delete[]nullptr
@S.M.捕捉得好。当然,那一定是个错误?我会解决的。
for (auto a : myVector)
{
delete[] a;
}
myVector.clear();