反向迭代器就是在容器中
从尾元素向首元素反向移动的迭代器。对于反向携带器,递增(以及递减)操作的含义会颠倒过来。递增一个反向迭代器(++it)会移动到前一个元素;递减一个迭代器(--it)会移动到下一个元素。

反向输出经过排序后的vector

ostream_iterator<int> out_iter(cout, " ");
vector<int> vec = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
sort(vec.rbegin(), vec.rend());
for (auto r_iter = vec.crbegin(); r_iter != vec.crend(); ++r_iter)
*out_iter++ = *r_iter;
cout << endl;

将名为line的string,最后一个逗号之后的单词打印

string line{ "FIRST, MIDDLE,LAST" };
auto rcomma = find(line.crbegin(), line.crend(), ',');
cout << string(line.crbegin(), rcomma) << endl;//输出TSAL
cout << string(rcomma.base(), line.cend()) << endl;//输出LAST,调用了reverse_iterator 中的base成员函数来完成这一转换

10.5.3算法命名规范
一些算法使用重载形式传递一个谓词

Unique(beg, end);  //使用==运算符比较元素
Unique(beg, end, comp); //使用comp比较元素

_if版本算法

接受一个元素之的算法通常有另一个不同名的(不是重载版本的)版本,该版本接受一个谓词代替元素值,接受谓词参数的算法都有附加的_if前缀:

find(beg, end, val);  // 查找输入范围中val第一次出现的位置
 find_if(beg, end, pred);  //查找第一个令pred为真的元素

区分拷贝元素的版本和不拷贝元素的版本

默认情况下,重排元素的算法将重排后的元素写回给定的输入序列中。这些算法还提供另一个版本,将元素写到一个指定的输出目的位置。如我们所见,写到额外目的的空间的算法都在名字后面附加一个_copy

reverse(beg, end);  //反转输入范围中元素的顺序
reverse_copy(beg, end, dest); //将元素按逆序拷贝到dest

一些算法同时提供_copy和_if版本。这些版本接受一个目的位置迭代器和一个谓词

remove_copy_if(vec.cbegin(), vec.cend(), out1_iter, [](int i) { return i % 2; });

//将偶元素拷贝到文件1,vec不变,使得lambda为真的条件是i为奇数,remove将使得谓词为真的元素删除,然后将剩余元素拷贝到文件1,所以是将偶数拷贝到文件1中

remove_copy_if(vec.cbegin(), vec.cend(), out2_iter, [](int i) { return !(i % 2); });

//将奇元素拷贝到文件2,vec不变,使得lambda为真的条件是i为偶数,remove将使得谓词为真的元素删除,然后将剩余元素拷贝到文件2,所以是将奇数拷贝到文件2中

10.6特定容器的算法

Lst.merge(lst2)

Lst.metge(lst2, comp)

将来自lst2的元素合并入lst。Lst和lst2都必须是有序的,元素将从lst2中删除。在合并之后,lst2变为空。第一个版本使用<运算符;第二个版本使用给定的比较操作

Lst.remove(val)

Lst.remove_if(pred)

调用erase删除掉与给定值相等(==)或令一元谓词为真的每个元素

Lst.reverse()

反转lst中的元素的顺序

Lst.sort()

Lst.sort(comp)

使用<或给定的比较操作排序元素

Lst.unique()

Lst.unique(pred)

调用erase删除同一个值得连续拷贝。第一个版本使用==;第二个版本使用给定的二元谓词

10.4.3反向迭代器Reverse_iterator笔记的更多相关文章

  1. 10.4 再探迭代器-插入/IO/反向

    10.4.1 插入迭代器 插入迭代器接受一个容器,生成一个迭代器,通过向该迭代器赋值可以实现向容器添加元素 (1)back_inserter: 接受一个参数, 示例: auto iter = back ...

  2. C++迭代器之'反向迭代器'

    反向迭代器(Reverse Iterator)是普通迭代器的适配器,通过重新定义自增和自减操作,以达到按反序遍历元素的目的.如果在标准算法库中用反向迭代器来代替普通的迭代器,那么运行结果与正常情况下相 ...

  3. 【C++】反向迭代器(rbegin,rend)(转载)

    转自:http://blog.csdn.net/kjing/article/details/6936325 rbegin和rend,很有用! C++ primer (中文版第四版)第273页 9.3. ...

  4. 【C++ Primer | 10】再探迭代器

    插入迭代器 1. 测试代码: #include<iostream> #include<vector> #include<list> #include<iter ...

  5. STL进阶--狡猾的反向迭代器

    反向迭代器 两种声明反向迭代器的方法 reverse_iterator<vector<int>::iterator> ritr; vector<int>::reve ...

  6. STL : 反向迭代器(Reverse Iterator)

    1. 定义反向迭代器(Reverse Iterator)是一种反向遍历容器的迭代器.也就是,从最后一个元素到第一个元素遍历容器.反向迭代器将自增(和自减)的含义反过来了:对于反向迭代器,++运算将访问 ...

  7. 【C++ Primer 第10章】 10.4.1 插入迭代器

    目录 •  iostream迭代器 •  反向迭代器 插入迭代器 插入迭代器,这些迭代器被绑定到一个容器上,可以向容器插入元素. 头文件为:#include<iterator it=t 在it指 ...

  8. 洛谷3320 SDOI2015寻宝游戏(set+dfs序)(反向迭代器的注意事项!)

    被\(STL\)坑害了一个晚上,真的菜的没救了啊. 准确的说是一个叫\(reverse\ iterator\)的东西,就是我们经常用的\(rbegin()\) 有一个非常重要的性质 在反向迭代器中,+ ...

  9. 一元多项式的乘法与加法运算 【STL-map哈希-map反向迭代器遍历 + 零多项式】

    设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...

随机推荐

  1. 剑指offer-面试题26-树的子结构-二叉树

    /* 题目: 输入两棵二叉树A和B,判断B是不是A的子树. */ /* 思路: 1.注意浮点数大小的判断. 2.判断树A的某个节点是否和树B的根节点是否相同, 若相同,则判断以A该节点为根节点是否包含 ...

  2. Java文件与流测试

    import java.io.File; import java.io.InputStreamReader; import java.math.BigDecimal; import java.io.B ...

  3. Python3标准库:enum枚举

    1. enum枚举 枚举是一组符号名称(枚举成员)的集合,枚举成员应该是唯一的.不可变的.在枚举中,可以对成员进行恒等比较,并且枚举本身是可迭代的. 1.1 创建枚举 可以使用class语法派生Enu ...

  4. MySQL进阶之存储引擎MyISAM与InnoDB的区别

    一.存储引擎(表类型) 通常意义上,数据库就是数据的集合,具体到计算机数据库可以是存储器上一些文件的集合或一些内存数据的集合.我们通常说的MySQL数据库.sql Server数据库等其实是数据库管理 ...

  5. php 公众号开发

    思考: 1,优先使用php扩展库的sdk,配合微信文档. 2,公众号开发比较简单,重在业务. 公众号关联与消息分发 <?php namespace app\wap\controller; use ...

  6. MySQL的字段属性+SQLyog查看建表语句

    MySQL的字段属性 写在前面:数据库就是单纯的表,用来存储数据,只有行和列.行代表数据,列代表字段(id.name.age这种就叫字段) 1.长度 2.默认 3.主键 4.非空 5.Unsigned ...

  7. 假期学习【十一】Python切词,以及从百度爬取词典

    今天主要对从CSDN爬取的标题利用jieba(结巴)进行分词,但在分词过程中发现,如大数据被分成了大/数据,云计算被分隔成了云/计算. 后来又从百度百科--->信息领域爬取了相关词语作为词典,预 ...

  8. 模块简介与matplotlib基础

    模块简介与matplotlib基础 1.基本概念 1.1数据分析 对已知的数据进行分析,提取出一些有价值的信息. 1.2数据挖掘 对大量的数据进行分析与挖掘,得到一些未知的,有价值的信息. 1.3数据 ...

  9. P1164 小A点菜【dp】

    P1164 小A点菜 提交 43.03k 通过 24.37k 时间限制 1.00s 内存限制 125.00MB 题目提供者洛谷 难度普及- 历史分数100 提交记录 查看题解 标签 洛谷原创   查看 ...

  10. mac 命令行下 vim 的使用

    vi/vim 使用实例 使用 vi 来建立名为 test.txt 的文件 vi test.txt1按下 ESC 按钮回到一般模式 在一般模式中按下 :wq 储存后离开 vi 基本上 vi/vim 共分 ...