Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.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++;_C++_Vector - Fatal编程技术网

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();