在循环中删除 std::vector 中的元素可能会导致问题,因为每次删除元素后,向量的大小会发生变化,从而影响迭代器的有效性。以下是一种解决方案:

  1. 使用反向迭代器进行循环,这样可以确保在删除元素时向量的大小不会影响迭代器的有效性。

  2. 使用 erase 函数删除元素,它会将指定位置的元素从向量中移除,并将后面的元素向前移动。

以下是示例代码:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec{1, 2, 3, 4, 5};

    // 使用反向迭代器循环删除元素
    for (auto iter = vec.rbegin(); iter != vec.rend(); ++iter) {
        if (*iter % 2 == 0) {
            vec.erase(std::next(iter).base());
        }
    }

    // 输出结果
    for (auto i : vec) {
        std::cout << i << " ";
    }

    return 0;
}

此代码将删除向量中的所有偶数,并输出结果:1 3 5


原文地址: https://www.cveoy.top/t/topic/ngcy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录