迭代器适配器

  • reverse_iterator:
如下图,end()rbegin()两个迭代器内部的指针起始是一样的,区别在于方向不同,导致取的值不同;
因此通过调用reverse_iterator的构造函数,将正向迭代器保存到cunrrent中,当真正调用*++等等成员函数时,对保存的current加以改造

使用方式:
vector<int> v;
...
v.rbegin(); //就会得到v.end()的逆行迭代器,对rbegin()进行操作时,实际底层是在v.end()(即current)的操作基础上进行改造

在这里插入图片描述

  • inserter iterator:
    有三种插入迭代器:inserter(c, it);back_inserter©,front_inserter©;
    它们都是用数据成员保存了底层容器c(inserter还多保存一个插入位置it),并重载了operator=,当对这三种迭代器进行赋值动作时,会对底层容器分别调用insert,push_back,push_front。而对其它++,*等操作,只是直接返回back_insert_iterator本身,并不做其他事情;
下图中在copy算法中对第三参数resuly做的事情:*, =, ++操作
operator*不做任何事情,直接返回本身
operator=会对底层容器调用insert操作
operator++不做任何事情,直接返回本身

在这里插入图片描述

  • stream_iterator:istream_iterator和ostream_iteraor
//调用ostream_iterator的构造函数,将输出流cout和分隔符,保存在其数据成员中
//当对ostream_iterator做赋值操作时,ostream_iterator重载的operator=内作cout << *first; cout << ",";操作
ostream_iterator<int> out_it(cout, ","); 

如下图,operator*,operator++同样不做任何事情,只有operator=内分别对保存的数据成员调用<<

在这里插入图片描述

istream_iterator<double> eos;//iit==eos代表输入结束了
istream_iterator<double> iit(cin);

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值