vector :: insert函数的包装器

时间:2015-06-20 22:21:02

标签: c++ vector insert iterator

我正在为std::vector课做一点包装。我不使用模板:我的向量声明为std::vector<int>。现在我需要insert函数的包装器,但我不知道参数有哪些类型。我试过这个:

std::vector<int>::iterator insert(std::vector<int>::const_iterator position, std::vector<int>::iterator first, std::vector<int>::iterator last) {
    prepare_to_changing();
    data_->vector_.insert(position, first, last);
}

这是我调用此函数的方法:

insert(this->nums_.end(), tmp.nums_.begin() + this->nums_.size(), tmp.nums_.end());

其中nums_std::vector<int>

但是编译器说firstlast并且返回类型不正确。我应该使用哪种?

2 个答案:

答案 0 :(得分:1)

  template <class InputIterator>
        void insert (iterator position, InputIterator first, InputIterator last);

因此,将插入函数的返回类型更改为void,因为您没有返回任何内容:

void insert(std::vector<int>::iterator position, std::vector<int>::iterator first, std::vector<int>::iterator last) {
    prepare_to_changing();
    data_->vector_.insert(position, first, last);
}

答案 1 :(得分:1)

插入为:

template <class InputIterator>
void insert (iterator position, InputIterator first, InputIterator last);

测试程序:

#include <vector>
#include <iostream>
using namespace std;

class Vector
{
private:
    vector<int> vec;
public:
    void insert(vector<int>::const_iterator position, vector<int>::iterator first, vector<int>::iterator last)
    {
        vec.insert(position, first, last);
    }
    void print()
    {
        for (int i = 0; i < vec.size(); i++)
            cout << vec.at(i) << " ";
        cout << endl;
    }
    vector<int>::const_iterator begin()
    {
        return vec.begin();
    }
    vector<int>::const_iterator end()
    {
        return vec.end();
    }
};
int main()
{
    Vector obj;
    vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);

    obj.insert(obj.begin(), vec.begin(), vec.end());
    obj.print();

    return 0;
}