我正在为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>
但是编译器说first
,last
并且返回类型不正确。我应该使用哪种?
答案 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;
}