当前位置:首页 C++ > 正文

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
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击