向量插入同一对象

Agr*_*cus 4 c++ iterator vector

我试图将一个向量中的几个值插入到相同的向量对象中,但似乎出错了:

#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;
}
Run Code Online (Sandbox Code Playgroud)

我期待从元件vec.begin()+23至元件vec.end()-46被插入到载体中。但是输出是:

3 1 2 1 2 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)

编译器是g++ 4.1.2。我在哪里错了?

joh*_*ohn 8

问题在于,当您开始插入元素时,会使该向量的所有现有迭代器(包括指定要尝试插入的范围的迭代器)都无效。一种简单的解决方案是复制要首先插入的向量的切片。

 vector<int> tmp(vec.begin() + 2, vec.end() - 4);
 vec.insert(vec.begin(), tmp.begin(), tmp.end());
Run Code Online (Sandbox Code Playgroud)