【发布时间】:2015-07-15 02:59:02
【问题描述】:
我正在制作一个使用 std::vector 来保存一堆对象的程序。
std::vector<Ball> balls;
for (int i = 0; i < ball.size(); ++i){
if (...some condition...){
//How should I delete balls[i]
}
如果我这样做了
std::vector<Ball> balls;
//put a bunch of balls in balls
for (int i = 0; i < ball.size(); ++i){
if (...some condition...){
balls.erase(balls.begin() + i);
}
每个球中没有动态分配的内存,那么这是否完全清理了balls[i]?我永远不必担心公羊上的那个球吗?
感谢大家的帮助!
【问题讨论】:
-
是的,球会自动销毁。
-
这个循环有问题。当你擦除元素
i时,它后面的所有元素都会向下移动。然后,当您增加i时,您将跳过刚刚移动到其位置的球。 -
删除项目时请确保跳过
++i。否则,您将跳过处理向量的某些项。 -
@RSahu 老实说,OP 应该使用
erase返回的迭代器,或者使用 remove_if-erase 习惯用法。手动处理索引只会导致不必要的非一错误 -
@KABoissonneault,VladFromMoscow 的回答提出了从向量中删除项目的正确方法。如果 OP 坚持他的策略,那么了解这个陷阱对他们来说很重要。
标签: c++ visual-c++ vector