搬:【STL】插入型迭代器(Insert Iterator)或插入器(inserter)

【STL】插入型迭代器(Insert Iterator)或插入器(inserter)

2012年11月20日 19:15:15 huang_xw 阅读数:9823

 

【STL】插入型迭代器(Insert Iterator)或插入器(inserter)

https://blog.csdn.net/wyx819/article/details/6393934

 

1. 定义
插入型迭代器(Insert Iterator),又叫插入器(Inserter)。
2. 作用
插入迭代器的主要功能为把一个赋值操作转换为把相应的值插入容器的操作。
算法库对所有在容器上的操作有约束:决不修改容器的大小(不插入、不删除)。有了插入迭代器,既使得算法库可以通过迭代器对容器插入新的元素,又不违反这一统带,即保持了设计上的一致性。
3. 类型
3.1 尾部插入器(back_insert_iterator)
使用:通过调用容器的push_back()成员函数来插入元素
功能:在容器的尾端插入元素
限制:只有提供了push_back()成员函数的容器中
适用:vector deque list
3.2 头部插入器(front_insert_iterator)
使用:通过调用容器的push_front()成员函数来插入元素
功能:在容器的前端插入元素
限制:只有提供了push_front()成员函数的容器中
适用:deque list
3.3 普通插入器(insert_iterator)
使用:通过调用insert()成员函数来插入元素,并由用户指定插入位置
功能:在容器的指定位置插入元素
限制:所有STL容器都提供了insert()函数.
适用:所有STL容器
4. 例子

 
  1. #include <iostream>

  2. #include <vector>

  3. #include <list>

  4. #include <iterator>

  5.  
  6. using namespace std;

  7. template<typename T>

  8.  
  9. void PrintElements(T c)

  10. {

  11. T::const_iterator itr = c.begin();

  12. while(itr != c.end())

  13. cout << *itr++ <<" ";

  14. }

  15.  
  16. int main()

  17. {

  18. vector<int> vecSrc;

  19. list<int> vecDest;

  20.  
  21. for(vector<int>::size_type i = 0; i < 3; ++i)

  22. vecSrc.push_back(i);

  23.  
  24. // 1. 类back_insert_iterator与函数back_inserter

  25. // explicit back_insert_iterator(Container& _Cont);

  26. // template<class Container> back_insert_iterator<Container> back_inserter(Container& _Cont);

  27. copy(vecSrc.begin(), vecSrc.end(), back_insert_iterator<list<int> >(vecDest));

  28. // copy(vecSrc.begin(), vecSrc.end(), back_inserter(vecDest)); // 效果一样

  29. PrintElements(vecDest);

  30. cout << endl;

  31.  
  32. // 2. 类front_insert_iterator与函数front_inserter

  33. // explicit front_insert_iterator(Container& _Cont);

  34. // template<class Container> front_insert_iterator<Container> front_inserter(Container& _Cont);

  35. copy(vecSrc.begin(), vecSrc.end(), front_insert_iterator<list<int> >(vecDest));

  36. // copy(vecSrc.begin(), vecSrc.end(), front_inserter(vecDest));

  37. PrintElements(vecDest);

  38. cout << endl;

  39.  
  40. // 3. 类insert_iterator与函数inserter

  41. // insert_iterator(Container& _Cont, typename Container::iterator _It);

  42. // template<class Container> insert_iterator<Container> inserter(Container& _Cont, typename Container::iterator _Where);

  43. copy(vecSrc.begin(), vecSrc.end(), insert_iterator<list<int> >(vecDest, ++vecDest.begin()));

  44. // copy(vecSrc.begin(), vecSrc.end(), inserter(vecDest, ++vecDest.begin()));

  45. PrintElements(vecDest);

  46.  
  47. return 0;

  48. }

运行结果:

 
  1. 0 1 2

  2. 2 1 0 0 1 2

  3. 2 0 1 2 1 0 0 1 2 请按任意键继续.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值