STL之--插入迭代器(back_inserter,inserter,front_inserter的区别)
2024-08-25 04:17:44
除了普通迭代器,C++标准模板库还定义了几种特殊的迭代器,分别是插入迭代器、流迭代器、反向迭代器和移动迭代器,定义在<iterator>
头文件中,下面主要介绍三种插入迭代器(back_inserter,inserter,front_inserter)
的区别。
首先,什么是插入迭代器?插入迭代器是指被绑定在一个容器上,可用来向容器插入元素的迭代器。 back_inserter
:创建一个使用push_back的迭代器 inserter
:此函数接受第二个参数,这个参数必须是一个指向给定容器的迭代器。元素将被插入到给定迭代器所表示的元素之前。 front_inserter
:创建一个使用push_front的迭代器(元素总是插入到容器第一个元素之前)
由于list容器类型是双向链表,支持push_front和push_back操作,因此选择list类型来试验这三个迭代器。
std::vector<int> v1(, );
std::vector<int> v2(, );
std::copy(v1.begin(), v1.end(), v2.begin());
std::vector<int> v3();
//下列这行代码会导致程序崩溃,因为目标容器v3的大小必须大于等于源容器的大小v1
//std::copy(v1.begin(), v1.end(), v3.begin());
//为了解决这个问题可以使用std::back_inserter()函数。
std::copy(v1.begin(), v1.end(), std::back_inserter(v3));
//用法及区别
list<int> lst = { , , , , , , , , };
list<int> lst2 ={}, lst3={},lst4={};
copy(lst.cbegin(), lst.cend(), back_inserter(lst2));
//lst2包含10,1,2,3,4,5,6,7,8,9
copy(lst.cbegin(), lst.cend(), inserter(lst3, lst3.begin()));
//lst3包含1,2,3,4,5,6,7,8,9,10
copy(lst.cbegin(), lst.cend(), front_inserter(lst4));
//lst4包含9,8,7,6,5,4,3,2,1,10
由示例便可轻易看出这三者的区别了。
最新文章
- 关于面试别问及Spring如何回答思路总结!
- java UDP
- Java web--反射(解刨)
- 二十、【.Net开源】EFW框架核心类库之WebService服务
- CruiseControl.Net学习记录
- Eclipse中安装可以新建html文件的插件(Eclipse HTML Editor)
- 在 Canvas 中绘制扇形
- HDU 1540 POJ 2892 Tunnel Warfare
- 常用js类型相互转换
- 动态样式语言—LESS
- Understanding and Using HRMS Security in Oracle HRMS
- 自然语言处理(nlp)比计算机视觉(cv)发展缓慢,而且更难!
- Linux内存管理 (20)最新更新和展望
- HTML5外包注意事项-开发HTML5游戏的九大坑与解决方法剖析
- ubuntu-14.04安装最新tensorflow记录
- 51Nod 最小公倍数之和V3
- armv8 memory system
- Controller Plane
- Nginx 域名重定向
- Map实现java缓存机制的简单实例