先看代码:
#include<iostream> #include<vector> #include<algorithm> #include<iterator> using namespace std; int main() { vector<int> coll; //create back_inserter for coll // - inconvenient way back_insert_iterator<vector<int> > iter(coll); //insert elements with the usual iterator interface *iter =1; iter++; *iter =2; iter++; *iter = 3; copy(coll.begin(),coll.end(),ostream_iterator<int>(cout,", ")); cout<<endl; //create back inserter and insert elements; //- convenient way back_inserter(coll) = 44; back_inserter(coll) = 55; copy(coll.begin(),coll.end(),ostream_iterator<int>(cout,", ")); cout<<endl; //use back inserter to append all elements again //reserve enough memory to avoid reallocation coll.reserve(2*coll.size()); copy(coll.begin(),coll.end(),//source back_inserter(coll));//destination copy(coll.begin(),coll.end(),ostream_iterator<int>(cout,", ")); cout<<endl; }
上面代码中的这一行:
back_insert_iterator<vector<int> > iter(coll);
定义了一个适配器。个人觉得也是属于iterator,用法应该差不多,于是依葫芦画瓢,写了如下一段代码,定义一个iterator:
iterator<vector<int> > iter1(coll);
结果报错:error C2976: “std::iterator”: 模板 参数太少。
看了iterator源代码,水平有限,只知道是少了参数,具体应该怎么补救不知道了。后来想了想,一般定义一个iterater一般都用如下形式:
vector<int>::iterator iter1; iter1 = coll.begin();
跟back_insert_iterator的定义方式完全不一样,我觉得应该是back_insert_iterator不是属于某个容器的一部分,应该是个独立于容器之外的东东。这个也许是它们的定义方式不同的原因所在。