为什么此代码不会从向量中删除所有元素?谢谢!
for (int i = 0; i < vec.size(); i++)
vec.erase(vec.begin());
答案 0 :(得分:7)
因为i
和vec.size()
交叉路径大约是原始矢量大小的一半。您只需撰写while (!vec.empty()) …
。
请注意,通过重复删除第一个元素来清除向量需要O(n 2 )时间(vec.clear()
需要O(1),除非元素具有非平凡的析构函数,这种情况需要O(n))。
除非您这样做是为了好玩,否则请使用vec.clear()
。
答案 1 :(得分:0)
如果你想确保立即释放所有内存,那就有一个既定的习语:
std::vector<YourTypeHere>().swap(vec);
这会创建一个临时向量,该向量最初为空,使用向量交换其内容,然后临时在分号处死。