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 back_inserter (Container& x);//模板函数,返回值为back_insert_iterator模板类对象

2.例子代码:

#include   
#include   
#include   
#include   
  
using namespace std;  
template  
  
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 back_insert_iterator back_inserter(Container& _Cont);  
    copy(vecSrc.begin(), vecSrc.end(), back_insert_iteratorint> >(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 front_insert_iterator front_inserter(Container& _Cont);  
    copy(vecSrc.begin(), vecSrc.end(), front_insert_iteratorint> >(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 insert_iterator inserter(Container& _Cont, typename Container::iterator _Where);  
    copy(vecSrc.begin(), vecSrc.end(), insert_iteratorint> >(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是适配器?

转载于:https://www.cnblogs.com/VIPler/p/4714191.html

你可能感兴趣的:(STL中,back_insert_iterator与back_inserter的区别。)