zoukankan      html  css  js  c++  java
  • STL中,back_insert_iterator与back_inserter的区别。

    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是适配器?

  • 相关阅读:
    pandas读写csv最简代码
    csv.read和csv.write
    交叉验证
    纪念被win10大更新搞崩的vbox
    c++中关于保留小数的小总结
    Java里的值传递与“引用传递”——一些想法
    Eclipse使用遇到的一些问题及解决方案(持续更新)
    Pray for 京阿尼——愿逝者安息,伤者早日康复
    洛谷p1208—混合牛奶【典型贪心】(关联排序小技巧)
    洛谷p1217—回文质数(默默宣传打表法)
  • 原文地址:https://www.cnblogs.com/VIPler/p/4714191.html
Copyright © 2011-2022 走看看