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

时间:2017-01-09 20:19:05

标签: c++

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);
}

在运行期间,它说:“矢量迭代器不可递增”。

2 个答案:

答案 0 :(得分:9)

std::vector::push_back

  

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

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

答案 1 :(得分:1)

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

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

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