反向迭代器就是在容器中
从尾元素向首元素反向移动的迭代器。对于反向携带器,递增(以及递减)操作的含义会颠倒过来。递增一个反向迭代器(++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. 886. 求组合数 II(模板)

    数据范围较大, a,b都是1e5 直接根据公式预处理  1/i就是求i的逆元(逆元求法:mod为质数,逆元就是 i^(mod-2)%mod ) O(N*logN) import java.util.S ...

  2. 嵊州D5T1 鸡翅 chicken

    鸡翅  chicken [问题描述] 小 x 非常喜欢小鸡翅. 他得知 NSC 超市为了吸引顾客,举行了如下的活动: 一旦有顾客在其他超市找到更便宜的小鸡翅, NSC 超市将免费送给顾客 1000g ...

  3. npm常用模块汇总

    npm常用模块汇总: 点击插件名字,查看使用文档 npm常用模块汇总 node常用模块汇总 gulp常用插件汇总 npx 使用教程:npx使用教程 bable:bable这是JavaScript编译器 ...

  4. A Bug's Life HDU - 1829 种类并查集

    //有n个成员,并查集开两倍空间 //1~n为一组, n+1~2n为一组.a与b互斥,则a与b反(即b+n)为同一集合, //同时b与a反(a+n)为同一集合 //在union操作中,引入w ,w越大 ...

  5. 数据库中的sql完整性约束

    完整性约束 完整性约束是为了表的数据的正确性!如果数据不正确,那么一开始就不能添加到表中. 1 主键 当某一列添加了主键约束后,那么这一列的数据就不能重复出现.这样每行记录中其主键列的值就是这一行的唯 ...

  6. H5-设置全屏背景图片样式

    .bgimg{ width: 100%; height: 95vh; margin: 0; padding: 0 .32rem; background-image: url('../image/ld. ...

  7. 每天进步一点点------Modelsim添加Xilinx仿真库的详细步骤

    Modelsim,可以选型SE和XE两个版本.Modelsim XE可以直接被ISE调用,而Modelsim SE需要手动添加仿真库.但SE版和OEM版在功能和性能方面有较大差别,比如对于大家都关心的 ...

  8. H5_0018:z-index失效的原因

    在做的过程中,发现了一个很简单却又很多人应该碰到的问题,设置Z-INDEX属性无效. 在CSS中,只能通过代码改变层级,这个属性就是z-index, 要让z-index起作用有个小小前提,就是元素的p ...

  9. vue自学入门-4(vue slot)

    vue自学入门-1(Windows下搭建vue环境) vue自学入门-2(vue创建项目) vue自学入门-3(vue第一个例子) vue自学入门-4(vue slot) vue自学入门-5(vuex ...

  10. BZOJ 3143 游走

    Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点, ...