C++学习笔记29——泛型算法之插入迭代器
来源:互联网 发布:新概念4是什么水平知乎 编辑:程序博客网 时间:2024/06/04 19:06
1,插入迭代器相关概念
插入迭代器(insert iterator):使用容器操作插入元素而不是覆写元素的迭代器。给插入迭代器赋值,等效于将具有所赋值的新元素插入到序列中。
头文件:
#include <iterator>using std::inserter;using std::back_inserter;using std::front_inserter;
注意:容器中前端(front)指的是靠近begin那端,后端(back)指的是靠近end那端。
插入器(inserter):一种迭代器适配器,带有一个容器参数,并生成一个特定类型的插入迭代器。
C++提供了3种插入器,他们之间的区别在于插入元素的位置不同:
(1)back_inserter,创建使用push_back实现插入的迭代器,
返回back_insert_iterator<Container>,如: std::back_insert_iterator<std::vector<int> >
(2)front_inserter,创建使用push_front实现插入的迭代器,所以绑定的容器必须支持push_front操作,vector容器就不行。
返回front_insert_iterator<Container>,如: std::front_insert_iterator<std::list<int> >
(3)inserter,创建使用inserter实现插入的迭代器,
返回insert_iterator<Container>,如: std::insert_iterator<std::vector<int> >
2,back_inserter
template< class Container >std::back_insert_iterator<Container> back_inserter( Container& c );效果:输入指定的容器,产生与该容器绑定的back_insert_iterator插入迭代器。
给back_insert_iterator赋值,相当于在原容器的尾部追加数据。
所有顺序容器都适用,因为所有顺序容器都适用push_back()操作.
/*******************************************************************/// back_insert_iterator与back_inserter/*******************************************************************/// 输入vector<int> vec;for (int i = 0; i < 3; ++i){vec.push_back(i);}// 打印原始输入vector <int>::iterator vIter;cout << "The initial vector vec is: ( ";for (vIter = vec.begin(); vIter != vec.end(); vIter++){ cout << *vIter << " ";}cout << ")." << endl;// 直接通过插入迭代器赋值// 在原容器的尾部追加数据back_insert_iterator<vector<int> > backiter(vec);*backiter = 30;backiter++; //需要手动自增*backiter = 40;// 用back_inserter生成插入迭代器,赋值back_inserter(vec) = 500; //自动自增back_inserter(vec) = 600;// 打印输出cout << "After the insertions, the vector vec is: ( ";for (vIter = vec.begin(); vIter != vec.end(); vIter++){ cout << *vIter << " ";}cout << ")." << endl;
输出为:
3,front_inserter
template< class Container >std::front_insert_iterator<Container> front_inserter( Container& c );
效果:输入指定的容器,产生与该容器绑定的front_insert_iterator插入迭代器。
给front_insert_iterator赋值,相当于在原容器的前端插入数据,亦即相当于每次调用push_front()。
不适用于vector容器,因为其不支持push_front()操作。
4,inserter
template< class Container >std::insert_iterator<Container> inserter( Container& c, typename Container::iterator i );
效果:输入指定的容器和插入起始位置的迭代器,产生与该容器绑定的insert_iterator插入迭代器。
给insert_iterator赋值,相当于在原容器的指定位置插入数据,亦即相当于每次调用insert()。
所有顺序容器都适用,因为所有顺序容器都适用insert()操作.
注意:inserter与front_inserter插入位置的区别。用insert和begin迭代器配合也无法实现front_insert的效果。
/*******************************************************************/// inserter与front_inserter/*******************************************************************/list<int> ilst; list<int> ilst2 = { 0 };list<int> ilst3 = { 0 };// 给ilst赋值,赋值完成后ilst的元素为:3 2 1 0for (list<int>::size_type i = 1; i != 5; i++){ilst.push_back(i);}// 使用front_inserter copycopy(ilst.begin(), ilst.end(), front_inserter(ilst2));// 使用inserter与begin copycopy(ilst.begin(), ilst.end(), inserter(ilst3,ilst3.begin()));//调用自写函数print_ilist打印3个容器cout << "原始输入:";print_ilist(ilst , " ");cout << "front_inserter:";print_ilist(ilst2, " ");cout << "inserter与begin:";print_ilist(ilst3, " ");
输出为:
请注意两种插入方式的区别:
0 0
- C++学习笔记29——泛型算法之插入迭代器
- 算法学习笔记之插入排序算法
- 插入排序算法学习——算法导论学习笔记
- 算法学习笔记之插入排序
- [学习笔记]排序算法之插入排序
- 算法学习笔记之插入排序
- 算法导论学习笔记——插入排序
- [算法学习笔记]排序——插入排序
- C / C++算法学习笔记(6)-插入法
- Linux C学习笔记-排序算法1-插入排序
- 算法学习之插入算法
- 算法导论学习---红黑树详解之插入(C语言实现)
- 算法(第四版)学习笔记之java实现插入排序
- 【C】排序算法之——插入排序(直接插入排序)
- 算法学习笔记----插入排序
- 算法学习笔记--插入排序
- C学习笔记之---八皇后算法
- C++学习笔记28——泛型算法之iostream迭代器
- 数组初始化
- Centos6安装Git
- UI基础-UITableView 高级
- LintCode:数字组合
- Android AutoLayout全新的适配方式 堪称适配终结者
- C++学习笔记29——泛型算法之插入迭代器
- 经济节约
- 树莓派忘记密码如何重设
- java基础
- android compatibility and System Permissions
- Android入门第六篇之ListView (一)
- 字符串转换成double类型
- 完美素数
- 对深拷贝与浅拷贝的再次理解