首页 > 解决方案 > 在同一对象内插入向量

问题描述

我试图从一个向量插入几个值到同一个向量对象,但它似乎出错了:

#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()+2ie 3到 element vec.end()-4ie 6的元素被插入到向量中。但输出是:

3 1 2 1 2 3 4 5 6 7 8 9

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

标签: c++vectoriterator

解决方案


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

 vector<int> tmp(vec.begin() + 2, vec.end() - 4);
 vec.insert(vec.begin(), tmp.begin(), tmp.end());

推荐阅读