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是适配器?
时间: 2024-10-19 13:54:48