码迷,mamicode.com
首页 > 其他好文 > 详细

back_insert_iterator和iterator用起来不一样。

时间:2015-03-31 00:30:36      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:

先看代码:

#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不是属于某个容器的一部分,应该是个独立于容器之外的东东。这个也许是它们的定义方式不同的原因所在。

back_insert_iterator和iterator用起来不一样。

标签:

原文地址:http://www.cnblogs.com/VIPler/p/4379502.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!