向量中的 Push_back() 表现得很奇怪

shu*_*ade -1 c++ vector push-back

预期输出是: 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;
} 
Run Code Online (Sandbox Code Playgroud)

Chr*_*ris 6

v在循环中进行修改会使a您创建的迭代器无效,从而导致未定义的行为。

从该push_back函数的 CPPReference 页面:

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