迭代时从向量中删除项目?
我有一个向量,其中包含活动或非活动的项目.我希望此向量的大小保持较小以解决性能问题,因此我希望从向量中删除已标记为非活动的项目.我在迭代时尝试这样做,但我收到错误向量迭代器不兼容".
I have a vector that holds items that are either active or inactive. I want the size of this vector to stay small for performance issues, so I want items that have been marked inactive to be erased from the vector. I tried doing this while iterating but I am getting the error "vector iterators incompatible".
vector<Orb>::iterator i = orbsList.begin();
while(i != orbsList.end()) {
bool isActive = (*i).active;
if(!isActive) {
orbsList.erase(i++);
}
else {
// do something with *i
++i;
}
}
推荐答案
过去我做过的最易读的方法是使用 std::vector::erase
结合 std::remove_if
.在下面的示例中,我使用此组合从向量中删除任何小于 10 的数字.
The most readable way I've done this in the past is to use std::vector::erase
combined with std::remove_if
. In the example below, I use this combination to remove any number less than 10 from a vector.
(对于非 c++0x,您可以将下面的 lambda 替换为您自己的谓词:)
// a list of ints
int myInts[] = {1, 7, 8, 4, 5, 10, 15, 22, 50. 29};
std::vector v(myInts, myInts + sizeof(myInts) / sizeof(int));
// get rid of anything < 10
v.erase(std::remove_if(v.begin(), v.end(),
[](int i) { return i < 10; }), v.end());
相关文章