C++之inserter函数与插入迭代器

11 篇文章 0 订阅

紫书5-5碰到这么个东西

#define all(s0) s0.begin(),s0.end()
#define ins(s0) inserter(s0,s0.begin())《----一开始不知道这个是什么
set_union(all(s1), all(s2), ins(sR));

苦查资料(期间还去图书馆借了本c++从入门到精通,初中看这一系列觉得难,现在反而觉得不够看了)发现
inserter第二个参数和他的返回值都是迭代器,但是由inserter函数返回的迭代器准确一点说应该是叫插入适配器
他和普通的迭代器有如下区别

vector<int> s{ 1, 2, 3,3 };
fill_n(s.begin(), 2, 5);输出5 5 3 3
fill_n(inserter(s,s.begin()), 2, 5);输出5 5 1 2 3 3

你看,本来是直接覆盖的,也就是访问内容,变成插入了,那这玩意到底是如何工作的呢?同样的迭代器为何它如此优秀呢?
看如下解释:
除了为每个容器定义的迭代器之外,标准库在头文件iterator中还定义了额外几种迭代器。这些迭代器包括以下几种。

  • 插入迭代器:这些迭代器被绑定到一个容器上,可用来向容器插入元素
  • 流迭代器:这些迭代器被绑定到输入或输出上,可用来遍历所有关联的IO流
  • 反向迭代器:这些迭代器向后而不是向前移动。除了forward_list之外的标准库容器都有反向迭代器
  • 移动迭代器:这些专用的迭代器不是拷贝其中的元素,而是移动它们。

为什么这些迭代器可以实现这么强的功能呢?

迭代器如何工作
back_inserter(container)返回尾部插入型迭代器,内部会调用容器container的push_back()方法来将数据插入容器的尾部
front_inserter(container)返回头部插入型迭代器,内部会调用容器container的push_front()方法来将数据插入容器的头部
inserter(container,pos)返回通用插入型迭代器,内部会调用容器container的insert(pos)方法将数据插入到pos位置。
  • 20
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值