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

  • 相关阅读:
    关于Visual Studio.NET 2008开发一册通C# 3.0从基础到项目实战的读后感
    书.NET 3.5与VB 2008高级编程(第3版)的评论
    Java 基础语法
    idea 无法创建子目录
    壁纸
    【博客园】美化
    Java变量和常量
    本人负责任的告诉你,从博客看不出什么东东来。
    DataFormating的用法总结
    javascript弹出div(一)
  • 原文地址:https://www.cnblogs.com/VIPler/p/4714191.html
Copyright © 2011-2022 走看看