C++ 在CPP中插入

C++ 在CPP中插入,c++,C++,我有这样的想法: vector<int> tmp={1,4,6,10,6}; vector<int>::iterator it1=tmp.begin()+1; vector<int>::iterator it2=tmp.begin()+3; // printing before insertion cout<<*it1<<" "<<*it2<<endl; tmp.insert(tmp.begin()+2, 2

我有这样的想法:

vector<int> tmp={1,4,6,10,6};
vector<int>::iterator it1=tmp.begin()+1;
vector<int>::iterator it2=tmp.begin()+3;

// printing before insertion
cout<<*it1<<" "<<*it2<<endl;

tmp.insert(tmp.begin()+2, 200 );

//printing after insertion
cout<<*it1<<" "<<*it2<<endl;
4 10
0 10

有人能帮我理解这里发生了什么错误吗?

相关:我在发布之前就关注了它。我声明“插入点之前的所有迭代器和引用都不受影响”。。。。所以这里的“it1”指向插入点之前的元素,那么它为什么会受到影响呢?为什么即使在插入点之前,其值也会变为0?“…除非新容器大小大于以前的容量(在这种情况下,所有迭代器和引用都无效)”@ScottK:undefined behavior。如果向量必须重新分配内部数组,则所有现有迭代器都将无效。要使示例正确运行,请使用索引而不是iterators@ScottK我不认为它没有受到影响;我认为这似乎没有受到影响,因为未定义行为的一个(更邪恶的)可能结果是,在某些场景中,事情似乎可以按照您预期的方式运行。特别是,我怀疑it2指向的是(愚蠢的运气)还没有被新数据覆盖的可用内存。我声明“插入点之前的所有迭代器和引用都不受影响”。。。。所以这里的“it1”指向插入点之前的元素,那么它为什么会受到影响呢?为什么即使在插入点之前,其值也会变为0?“…除非新容器大小大于以前的容量(在这种情况下,所有迭代器和引用都无效)”@ScottK:undefined behavior。如果向量必须重新分配内部数组,则所有现有迭代器都将无效。要使示例正确运行,请使用索引而不是iterators@ScottK我不认为它没有受到影响;我认为这似乎没有受到影响,因为未定义行为的一个(更邪恶的)可能结果是,在某些场景中,事情似乎可以按照您预期的方式运行。特别是,我怀疑it2指向的是(愚蠢的运气)还没有被新数据覆盖的可用内存。