C++为什么这段代码不起作用?

C++ why this code doesn't work?

本文关键字:代码 不起作用 为什么 段代码 C++      更新时间:2023-10-16
vector<int> v = { 1,2,3,4,5 };
for (auto beg = v.begin(); beg != v.end();++beg)
{
    if (beg == v.begin())
        v.push_back(50);
}

在运行时,它说:"向量迭代器不可增量"。

参见 std::vector::p ush_back。

如果新的 size() 大于 capacity(),则所有迭代器和引用(包括过去结束的迭代器)都将失效。否则,只有过去结束迭代器失效。

在您的示例中,beg是一个迭代器。它被push_back无效,你不能再使用它了。

前所述std::vector::push_back()可能会使您的迭代器无效。可能但非常丑陋的解决方案可能是:

for (auto beg = v.begin(); beg != v.end();++beg)
{
    if (beg == v.begin()) {
        v.push_back(50);
        beg = v.begin();
    }
}

但是你的逻辑似乎很复杂,为什么不在循环之前推回去呢?