2015-06-20 38 views
1

我正在为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和返回类型不正确。我应该使用哪个?

+1

你应该展示如何调用函数insert a nd这个函数定义,函数声明没问题。 – Steephen

+0

我已经添加了 – Alexandr

+0

谢谢你的回答,我修复了这个问题。 – Alexandr

回答

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

因此改变插入功能为无效的您的返回类型,因为你不返回任何东西:

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); 
} 
+0

但是'this'和'tmp'是不同的对象,所以它并不意味着'nums_.end()',实际上我没有得到哪个'nums_'你在说什么? – Alexandr

+0

现在它说'错误:没有可行的转换'__wrap_iter '到'__wrap_iter '' – Alexandr

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; 
} 
+0

编译器说错误:'没有匹配成员函数调用'插入'在12行。另外它说'注意:候选函数[与_InputIterator = __gnu_cxx :: _ normal_iterator >>]不可行:没有已知的转换从'__normal_iterator 'to'__normal_iterator <指针,[...]>'用于第一个参数'。 – Alexandr

+0

对我来说运行良好(VC++)。我注意到这不适用于gcc。从我收到的错误,我没有看到任何签名vector :: insert,如我上面定义的。对我来说这个版本没有实现。 –

+0

VC++输出:http://webcompiler.cloudapp.net/ –