如何从向量中删除所有元素

时间:2013-12-25 07:38:19

标签: c++ stdvector

为什么此代码不会从向量中删除所有元素?谢谢!

for (int i = 0; i < vec.size(); i++)
  vec.erase(vec.begin());

2 个答案:

答案 0 :(得分:7)

因为ivec.size()交叉路径大约是原始矢量大小的一半。您只需撰写while (!vec.empty()) …

即可

请注意,通过重复删除第一个元素来清除向量需要O(n 2 )时间(vec.clear()需要O(1),除非元素具有非平凡的析构函数,这种情况需要O(n))。

除非您这样做是为了好玩,否则请使用vec.clear()

答案 1 :(得分:0)

如果你想确保立即释放所有内存,那就有一个既定的习语:

std::vector<YourTypeHere>().swap(vec);

这会创建一个临时向量,该向量最初为空,使用向量交换其内容,然后临时在分号处死。