10.4.3反向迭代器Reverse_iterator笔记
反向迭代器就是在容器中
从尾元素向首元素反向移动的迭代器。对于反向携带器,递增(以及递减)操作的含义会颠倒过来。递增一个反向迭代器(++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笔记的更多相关文章
- 10.4 再探迭代器-插入/IO/反向
10.4.1 插入迭代器 插入迭代器接受一个容器,生成一个迭代器,通过向该迭代器赋值可以实现向容器添加元素 (1)back_inserter: 接受一个参数, 示例: auto iter = back ...
- C++迭代器之'反向迭代器'
反向迭代器(Reverse Iterator)是普通迭代器的适配器,通过重新定义自增和自减操作,以达到按反序遍历元素的目的.如果在标准算法库中用反向迭代器来代替普通的迭代器,那么运行结果与正常情况下相 ...
- 【C++】反向迭代器(rbegin,rend)(转载)
转自:http://blog.csdn.net/kjing/article/details/6936325 rbegin和rend,很有用! C++ primer (中文版第四版)第273页 9.3. ...
- 【C++ Primer | 10】再探迭代器
插入迭代器 1. 测试代码: #include<iostream> #include<vector> #include<list> #include<iter ...
- STL进阶--狡猾的反向迭代器
反向迭代器 两种声明反向迭代器的方法 reverse_iterator<vector<int>::iterator> ritr; vector<int>::reve ...
- STL : 反向迭代器(Reverse Iterator)
1. 定义反向迭代器(Reverse Iterator)是一种反向遍历容器的迭代器.也就是,从最后一个元素到第一个元素遍历容器.反向迭代器将自增(和自减)的含义反过来了:对于反向迭代器,++运算将访问 ...
- 【C++ Primer 第10章】 10.4.1 插入迭代器
目录 • iostream迭代器 • 反向迭代器 插入迭代器 插入迭代器,这些迭代器被绑定到一个容器上,可以向容器插入元素. 头文件为:#include<iterator it=t 在it指 ...
- 洛谷3320 SDOI2015寻宝游戏(set+dfs序)(反向迭代器的注意事项!)
被\(STL\)坑害了一个晚上,真的菜的没救了啊. 准确的说是一个叫\(reverse\ iterator\)的东西,就是我们经常用的\(rbegin()\) 有一个非常重要的性质 在反向迭代器中,+ ...
- 一元多项式的乘法与加法运算 【STL-map哈希-map反向迭代器遍历 + 零多项式】
设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...
随机推荐
- Android 存档最优选项
1 开发环境:VS2019最新版本(16.4.5) 2 存档最优选项 说明:apk包70M(默认选项),apk包12M(调整后选项) 位置:Android 选项
- Leetcode Week5 Maximum Sum Circular Subarray
Question Given a circular array C of integers represented by A, find the maximum possible sum of a n ...
- 简单记账本APP开发一
在对Android的一些基础的知识有了一定了解,以及对于AndroidStudio的如何使用有了 一定的熟悉后,决定做一个简单的记账本APP 开发流程 1.记账本的页面 2.可以添加新的账目 (一)页 ...
- ansible-jinjia2模板
1. 含义 是基于python的模板引擎,包含变量和表达式两部分,这两者在模板求值的时候会被替换为值: 模板中还有标签,控制模板的逻辑 2. 基础语法 - 模板的表达式都包含在分隔符"{{ ...
- 积分题1之来自G.Han的一道积分题
今天,收到G.Han的提问,第一个是计算积分 \[\int_0^{\infty}{\frac{\ln x}{(x^2+1)^n}dx}\]顿时不明觉厉,然后在宝典<Table of Integr ...
- Qt多线程实现思路一
实现一个线程开启时,时间计时器任然能够计数,两路独立工作的线程功能.从类的帮助文件中可以看到如下信息,静态公共成员函数和保护类型的函数,在静态函数中有睡眠函数msleep毫秒级,sleep秒级,usl ...
- Office办公软件Excel使用整理
Office办公软件Excel使用整理 Excel默认打印预览于当前连接的打印机的纸张大小保持一致. Excel sheet不见了怎么办 -------------- 设置Excel第二页打印开始的位 ...
- vue之项目打包部署到服务器
这是今年的第一篇博客.整理一下vue如何从项目打包到部署服务器,给大家做下分享,希望能给大家带来或多或少的帮助,喜欢的大佬们可以给个小赞,如果有问题也可以一起讨论下. 第一步:这是很关键的一步.打开项 ...
- 获取redis指定实例中所有的key
需求:获取redis指定的实例中所有的key的名字. 千万不要使用keys *,可以使用scan命令的递归方式获取. 以下给出自己写的脚本,经过测试效果还可以. db_ip=5.5.5.101 db_ ...
- mysql中获取本月第一天、本月最后一天、上月第一天、上月最后一天等等
转自: https://blog.csdn.net/min996358312/article/details/61420462 1.当函数使用时,即interval(),为比较函数,如:interva ...