c++ - vector 删除范围内的元素

标签 c++ vector

为什么程序停止了?该程序可以编译,但如果我运行,他就会中断,并给出一些关于迭代器 vector 不可递增的信息。 怎么了?

int main() 
{
    std::vector<int> vec;
    for (int i = 1; i <= 100; ++i)
        vec.push_back(i);
    for (auto itr = vec.begin() + 5; itr < vec.end() - 5; ++itr)
        vec.erase(itr);
    for (const auto& itr : vec)
            std::cout << itr << std::endl;
    return 0;
}

最佳答案

你错了,因为函数 erase 不是空迭代器。 所以你可以这样做:

auto itr = vec.begin() + 5;
while (itr != vec.end() - 5) {
itr = vec.erase(itr);
}

或更灵活(无循环)

vec.erase(vec.begin() + 5, vec.end() - 5);

关于c++ - vector 删除范围内的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44911301/

相关文章:

c++ - 如何检查 C++ STL vector 中存在的值并将函数应用于 vector 的每个元素?

vector - 向量中的可变结构

c++ - 软件规划好用的软件?

c++ - 为了避免错误共享,每个单独的 unique_ptr vector 项缓存行对齐的 std::vector<std::unique_ptr<T>> 是否有意义?

c++ - 耗尽 std::random_device 的熵

java - java中通过引用传递一个整数

java - 使用 ObjectOutputStream 将一系列对象写入 .ser 文件并读回的最佳方法

c++ - 在结构指针 vector 上调用 C++ std::sort

c++ - 扣除其他类型所依赖的类型

+-* 的 python 压缩函数