cpp遍历过程删除vector中元素的两种办法

⌚Time: 2024-09-14 09:50:00

👨‍💻Author: Jack Ge

首先是使用索引进行遍历和删除,原理是找到符合条件的就从容器中移除,并在下次还检查相同的位置。因为后续的元素前移了一个位置。如果没有找到符合条件的元素就直接递增索引,检查下一个位置。

for ( unsigned int i=0; i < vec.size(); ) {
    if (vec.at(i) == 0) {
                vec.erase(vec.begin() + i);
            } else {
                ++i;
            }
}

还有一种办法是使用迭代器,但是要注意在容器中删除元素会让元素位置发生改变,迭代器会失效。需要在删除时重新赋值迭代器,所以使用下面的写法

for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ) {
    if (*it == 0) {
                    it = vec.erase(it);//删除元素时重新赋值迭代器
            } else {
                    ++it;
            }
}