首先是使用索引进行遍历和删除,原理是找到符合条件的就从容器中移除,并在下次还检查相同的位置。因为后续的元素前移了一个位置。如果没有找到符合条件的元素就直接递增索引,检查下一个位置。
for ( unsigned int i=0; i < vec.size(); ) {
if (vec.at(i) == 0) {
vec.erase(vec.begin() + i);
} else {
++i;
}
}还有一种办法是使用迭代器,但是要注意在容器中删除元素会让元素位置发生改变,迭代器会失效。需要在删除时重新赋值迭代器,所以使用下面的写法