C++ C++;为什么此代码没有';不行? 向量v={1,2,3,4,5}; 对于(自动beg=v.begin();beg!=v.end();++beg) { 如果(beg==v.begin()) v、 推回(50); }

C++ C++;为什么此代码没有';不行? 向量v={1,2,3,4,5}; 对于(自动beg=v.begin();beg!=v.end();++beg) { 如果(beg==v.begin()) v、 推回(50); },c++,C++,在运行时,它会说:“向量迭代器不可递增”。请参阅 如果新的size()大于capacity(),则所有迭代器和引用(包括过去的结束迭代器)都将无效。否则,只有结束迭代器的过去部分无效 在您的示例中,beg是一个迭代器。它被push_-back无效,您不能再使用它。如前面提到的std::vector::push_-back()可能会使迭代器无效。可能,但相当丑陋的解决方案可能是: vector<int> v = { 1,2,3,4,5 }; for (auto beg = v.begi

在运行时,它会说:“向量迭代器不可递增”。

请参阅

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


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

如前面提到的
std::vector::push_-back()
可能会使迭代器无效。可能,但相当丑陋的解决方案可能是:

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

但是您的逻辑似乎很复杂,为什么不在循环之前向后推呢?

请编辑您的问题,以包含一个非常聪明的运行时。请提供可能的副本。另外,您可能需要
自动&
和基于范围的循环。@Slava显然,如果没有它,问题是可以回答的,因此您的投诉是毫无意义的。我没有考虑代码,我只是想知道为什么这是一个错误。因此,答案不仅针对您,这就是我要求您修复代码的原因。我认为push_-back()使所有迭代器无效的原因是push_-back()更改了向量占用的内存地址,对吗?@gigi
push_-back
可能使迭代器无效。实际上,在您更新的示例中,很可能不会。现在你应该明白为什么会被问到。但是是的,如果
capacity()
不够大,无法容纳新的数据大小,vector可能需要重新分配存储内存。
for (auto beg = v.begin(); beg != v.end();++beg)
{
    if (beg == v.begin()) {
        v.push_back(50);
        beg = v.begin();
    }
}