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

STL中,back_insert_iterator与back_inserter的区别。

时间:2015-08-09 00:12:08      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:

1.参考http://www.cplusplus.com网站关于back_insert_iterator与back_inserter的介绍之后,我总算明白了:back_insert_iterator,顾名思义是个迭代器(后缀iterator),是一个模板类。而back_inserter是一个模板函数,实现在容器尾部插入元素。

back_insert_iterator:

template <class Container> class back_insert_iterator;//模板类

back_inserter:

template <class Container>
  back_insert_iterator<Container> back_inserter (Container& x);//模板函数,返回值为back_insert_iterator模板类对象

2.例子代码:

#include <iostream>  
#include <vector>  
#include <list>  
#include <iterator>  
  
using namespace std;  
template<typename T>  
  
void PrintElements(T c)  
{  
    T::const_iterator itr = c.begin();  
    while(itr != c.end())  
        cout << *itr++ <<" ";  
}  
  
int main()     
{     
    vector<int> vecSrc;  
    list<int> vecDest;  
  
    for(vector<int>::size_type i = 0; i < 3; ++i)  
        vecSrc.push_back(i);  
  
    // 1. 类back_insert_iterator与函数back_inserter  
    // explicit back_insert_iterator(Container& _Cont);  
    // template<class Container> back_insert_iterator<Container> back_inserter(Container& _Cont);  
    copy(vecSrc.begin(), vecSrc.end(), back_insert_iterator<list<int> >(vecDest));  
    // copy(vecSrc.begin(), vecSrc.end(), back_inserter(vecDest));  // 效果一样  
    PrintElements(vecDest);  
    cout << endl;  
  
    // 2. 类front_insert_iterator与函数front_inserter  
    // explicit front_insert_iterator(Container& _Cont);  
    // template<class Container> front_insert_iterator<Container> front_inserter(Container& _Cont);  
    copy(vecSrc.begin(), vecSrc.end(), front_insert_iterator<list<int> >(vecDest));  
    // copy(vecSrc.begin(), vecSrc.end(), front_inserter(vecDest));  
    PrintElements(vecDest);  
    cout << endl;  
  
    // 3. 类insert_iterator与函数inserter  
    // insert_iterator(Container& _Cont, typename Container::iterator _It);  
    // template<class Container> insert_iterator<Container> inserter(Container& _Cont, typename Container::iterator _Where);  
    copy(vecSrc.begin(), vecSrc.end(), insert_iterator<list<int> >(vecDest, ++vecDest.begin()));  
    // copy(vecSrc.begin(), vecSrc.end(), inserter(vecDest, ++vecDest.begin()));  
    PrintElements(vecDest);  
  
    return 0;  
}

效果一样的原因就是因为back_inserter(X)函数返回的是指向容器X末端的一个back_insert_iterator类对象。

3.back_insert_iterator是适配器,还是back_inserter是适配器?

STL中,back_insert_iterator与back_inserter的区别。

标签:

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

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