向量中的 Push_back() 表现得很奇怪[重复]

问题描述 投票:0回答:1

预期输出为:1 2 3 4,如果我们取消注释提到的执行推回操作的行并运行代码,预期输出仍然是 1 2 3 4。但猜猜它完全不同。运行一下你就知道了。为什么会发生这种情况?

#include <iostream>
#include<vector>
using namespace std;

int main()
{
    int k=2;
    vector<int> v;
    vector<int> :: iterator itr;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);  
    v.push_back(4); 
    v.push_back(5);
    v.push_back(6); 
    v.push_back(7); 
    
    
    auto a=v.begin();
    
    for(int i=0;i<4;i++){
        cout<<*a<<" ";
        //v.push_back(anynumber); ----------------------------------->This line
        a++;

    }
    return 0;
} 
c++ vector push-back
1个回答
1
投票

在循环中修改

v
会使您创建的迭代器
a
无效,从而导致未定义的行为。

来自 CPPReference 页面上的

push_back
功能:

如果操作后新的 size() 大于旧的capacity(),则会发生重新分配,在这种情况下,所有迭代器(包括 end() 迭代器)和对元素的所有引用都将无效。否则只有 end() 迭代器无效。

© www.soinside.com 2019 - 2024. All rights reserved.