我试图将一个向量中的几个值插入到相同的向量对象中,但似乎已出错:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> vec;
for(int i=0;i<9;i++)
{
vec.push_back(i+1);
}
vec.insert(vec.begin(),vec.begin()+2,vec.end()-4); //PROBLEM
vector<int>::iterator ivec=vec.begin();
while(ivec!=vec.end())
{
cout<<*ivec<<' ';
++ivec;
}
cout<<endl;
return 0;
}
我希望将vec.begin()+2
即 3 到元素vec.end()-4
即 6 的元素插入向量中。但是输出是:
3 1 2 1 2 3 4 5 6 7 8 9
编译器为g++ 4.1.2
。我在哪里错了?
答案 0 :(得分:8)
问题是,当您开始插入元素时,会使该矢量的所有现有迭代器无效,包括指定要尝试插入的范围的迭代器。简单的解决方案是复制要首先插入的向量的切片。
npm install
答案 1 :(得分:4)
vec.insert(vec.begin(),vec.begin()+2,vec.end()-4);
在这里,您将容器的迭代器传递给insert
。由于迭代器无效,因此不允许这样做。
a.insert(p,i,j)
期望: T是从
X
到*i
的 Cpp17EmplaceConstructible 。对于vector
和deque
,T
也是 Cpp17MoveInsertable 到X
中, Cpp17MoveConstructible , Cpp17MoveAssignable 和可插拔([swappable.requirements])。i
和j
都不是迭代器a
。效果:在
[i, j)
之前的p
中插入元素的副本。[i, j)
范围内的每个迭代器都应被完全取消引用一次。
因此,行为是不确定的。