为什么程序停止了?该程序可以编译,但是如果我运行,他会中断,并给出一些关于迭代器 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;
}

最佳答案

您错了,因为函数擦除不会使迭代器无效。
因此,您可以这样做:

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/

10-10 21:23
查看更多