c++vector遍历删除
作者:野牛程序员:2023-07-24 07:14:03 C++阅读 2921
当在C++中遍历std::vector
并在循环中删除元素时,需要小心,因为删除元素可能会使迭代器无效,导致未定义的行为。一种处理方法是使用“删除-移动”惯用法,这是一种在迭代容器时删除元素的常见技巧。
“删除-移动”惯用法包括使用std::remove_if
函数将要删除的元素移到容器的末尾,然后使用std::vector::erase
函数删除那些元素。
下面是一个示例代码:
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> vec = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 遍历 vector 并删除偶数 vec.erase(std::remove_if(vec.begin(), vec.end(), [](int num) { return num % 2 == 0; }), vec.end()); // 输出剩余的元素 for (int num : vec) { std::cout << num << " "; } std::cout << std::endl; return 0; }
以上代码会输出:
1 3 5 7 9
注意,在使用std::remove_if
之后,需要调用std::vector::erase
来真正删除不需要的元素。这样做可以保证迭代器的有效性,避免潜在的问题。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

- 上一篇:c++vector删除最后一个元素
- 下一篇:c++vector迭代器删除