删除c ++后,矢量大小不会改变

时间:2018-04-15 04:17:20

标签: c++ vector

我有一个向量类vector<VectorClass*> myVector;myVector.push_back(*data);被调用10次之后,我试图删除向量类。初始尺寸显示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

3 个答案:

答案 0 :(得分:2)

删除向量元素的内容不会减小向量的大小,但您甚至无法正确删除内容,因为您为每个指针指定了null然后使用delete[],所以什么都不会发生。

删除之前删除*it = 0;(删除之后可能不重要),然后删除每个元素内容并完成循环使用myVector.clear()清除矢量并将大小设置为零。

答案 1 :(得分:2)

您正在尝试*)删除向量中的每个元素,但不会从向量中删除指针。除非向量即将超出范围,否则应在此操作后清空向量。您的代码也可以简化一些。替换这个:

if(myVector.size() > 0){
  for (vector<VectorClass*>::iterator it = myVector.begin() ; it != myVector.end(); ++it){
     *it = 0;
     delete[] *it;
   }
}

用这个:

for (auto a : myVector)
{
    delete[] a;
}
myVector.clear();

另请注意,如果您使用delete[]分配了每个元素,则只应使用new[]。如果您使用new进行了分配,则应使用delete

而且,如果您使用new进行分配,则应考虑将向量声明为vector<VectorClass> myVector;,这样就无需手动delete每个元素。

*)我说您尝试删除每个元素,因为您在使用delete[]之前为每个元素指定了一个空指针。这使得delete[]毫无意义。

答案 2 :(得分:1)

您真的要删除向量的所有元素吗?然后使用clear的建议解决方案就可以了。

如果您只想删除某些元素,则需要使用std::vector::erase。另见