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的整数).数字间以空格分隔. ...
随机推荐
- Django---Django返回用户输入数据
前面写了关于HTML和Django结合的文章,通过视图与HTML结合,然后加上urls渲染返回给用户浏览器.很明显我们都能看到这些仅仅是静态HTML,那如何通过Django创建动态的HTML呢? 动态 ...
- Milestone
为什么开博客? 事情要从一只蝙蝠说起... 准备用博客做什么? 记录自己在开发中遇到的issue以及解决的思路:记录一些读书笔记以便温故:练习如何制造仪式感,ect. ...
- Wannafly Camp 2020 Day 1D 生成树 - 矩阵树定理,高斯消元
给出两幅 \(n(\leq 400)\) 个点的无向图 \(G_1 ,G_2\),对于 \(G_1\) 的每一颗生成树,它的权值定义为有多少条边在 \(G_2\) 中出现.求 \(G_1\) 所有生成 ...
- LRU算法实现 最近最久未使用
1.LRU算法实现 最近最久未使用(蚂蚁金服笔试题,本人亲自经历的[苦笑.jpg]) 实现原理:数组 主要功能:初始化.入队列 主要操作:数组元素移动 代码: package com.ch.evalu ...
- python3练习100题——040
原题链接:http://www.runoob.com/python/python-exercise-example40.html 题目:将一个数组逆序输出. a=[1,2,3,4,5] print a ...
- H5_0015:判断是否是微信加载
var e = document.createElement("script"); e.src = "https://res.wx.qq.com/open ...
- 2019-08-20 纪中NOIP模拟B组
T1 [JZOJ3490] 旅游(travel) 题目描述 ztxz16如愿成为码农之后,整天的生活除了写程序还是写程序,十分苦逼.终于有一天,他意识到自己的生活太过平淡,于是决定外出旅游丰富阅历. ...
- AcWing 11. 背包问题求方案数
//g[i,j]表示f[i,j]取最大值的方案数目 //体积最多是j 全部为0,v>=0 //体积恰好为j f[0][0]=0,f[i]=无穷,v>=0 //体积至少是j f[0][0]= ...
- java8的ConcurrentHashMap为何放弃分段锁,为什么要使用CAS+Synchronized取代Segment+ReentrantLock
原文地址:https://cloud.tencent.com/developer/article/1509556 推荐一篇 ConcurrentHashMap 和 HashMap 写的比较的的文章 j ...
- XJOI CSP-S2 2019开放模拟训练题1 赛后总结
比赛链接 友好数对 暴力枚举\([L,R]\)之间的所有数,将每个数进行"旋转",看是否符合题意. 注意"旋转"的次数,并不一定是数字位数.只要旋转回到了初始数 ...