每个容器都有反向迭代器(无需关联容器除外),reverse_iterator要和std::rbegin()以及std::end()配套使用,否则用了方向迭代器而不用rbegin()和rend()编译器是会报错的;接下来看例子:

#include <iostream>
#include <vector>
#include <time.h>
int main(int argc, char ** argv)
{
std::vector<int> vec;
int _data = ;
srand(time(NULL));
for (int i = ; i < ; ++i)
{
vec.push_back(rand() % );
}
for (std::vector<int>::iterator iter = std::begin(vec);iter != std::end(vec);++iter)
{
std::cout << *iter << " ";
}
std::cout << std::endl; std::cout << "input you want find data : ";
std::cin >> _data; auto result = std::find(std::begin(vec), std::end(vec), _data);
if (result != std::end(vec))
{
std::cout << "find this data and the position is : " << result - std::begin(vec) << std::endl;
}
else
{
std::cout << "no find !" << std::endl;
} //revser_iterator,如果是用std::begin()他就会报错
for (std::vector<int>::reverse_iterator reiter = std::rbegin(vec); reiter != std::rend(vec); ++reiter)
{
std::cout << *reiter << " ";
}
std::cout << std::endl;
auto result1 = std::find(std::rbegin(vec), std::rend(vec), _data);
if (result1 != std::rend(vec))
{
std::cout << "find this data and the position is : " << result1.base()-std::begin(vec) - << std::endl; } return ;
}

rbegin()返回的是最后一个元素的reverse_iterator,rend()返回的是第一个元素的前一个元素,这里和begin()和end()有所区别,begin()返回的是第一个元素,end()返回的是最后一个元素的后一个元素;

再则就是reverse_iterator.base()返回的reverse_iterator()的后面一个元素;所以为了得到元素的具体位置就应该是base() - begin() - 1;

运行的结果可以是这样(结果是不一定的因为采用了随机种子):

24 90 77 97 50 65 45 25 95 97
input you want find data : 65
find this data and the position is : 5
97 95 25 45 65 50 97 77 90 24
find this data and the position is : 5
请按任意键继续. . .

这里的位置是索引位置

    std::copy(std::cbegin(vec), std::cend(vec), std::ostream_iterator<int>(std::cout," "));        //需要头文件<iteraor>,作用是打印所有vec的元素

这里的copy()函数接受三个参数。第一个是复制范围的起始迭代器,第二个是参数是复制范围的尾迭代器,第三个是目的迭代器;

reverse_iterator和ostream_iterator的更多相关文章

  1. copy函数与ostream_iterator、reverse_iterator

    #include <iostream> #include <iterator> #include <vector> int main() { using names ...

  2. 迭代器类vector::iterator 和 vector::reverse_iterator 的实现、迭代器类型、常用的容器成员

    一.迭代器 迭代器是泛型指针 普通指针可以指向内存中的一个地址 迭代器可以指向容器中的一个位置 STL的每一个容器类模版中,都定义了一组对应的迭代器类.使用迭代器,算法函数可以访问容器中指定位置的元素 ...

  3. effective stl读书笔记 & stl里面提供的算法 & emplace & ostream_iterator

    加锁和解锁,也可以在构造函数和析构函数里面,自动调用. 相等和等价的关系:等价是用在排序的时候,跟less函数有关. vector,deque,string 要用erase-remove组合:而关联容 ...

  4. C++标准库分析总结(八)——<仿函数、适配器、istream_iterator、ostream_iterator、bind>

    一.仿函数定义 仿函数是STL中最简单的部分,存在的本质就是为STL算法部分服务的,一般不单独使用.仿函数(functors)又称为函数对象(function objects),虽然函数指针虽然也可以 ...

  5. 10.4.3反向迭代器Reverse_iterator笔记

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

  6. 如何在遍历中使用 iterator/reverse_iterator 删除元素

    如何在遍历中使用 iterator/reverse_iterator 删除元素 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循“署名-非商业用途-保持一致”创作公 ...

  7. std::reverse_iterator::base

    google chromium base MRU_Cache 支持反向erase iterator Erase(iterator pos) {  deletor_(pos->second);  ...

  8. std的find和reverse_iterator联合使用

    上代码: // test2013.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdlib.h> #in ...

  9. 浅谈reverse_iterator的base()函数

    非原创,原文链接:http://blog.csdn.net/shuchao/article/details/3705252 调用reverse_iterator的base成员函数可以产生"对 ...

随机推荐

  1. Linux下svn的安装与部署

    最近工作碰到一个问题,我和一个同伙负责开发一个管理系统,基于原来的代码上进行修改,每当他修改之后,我要再修改都要和他确定是不是最新的文件,才能进行修改.非常影响工作的效率,所以在网上找了关于svn的使 ...

  2. SQL0286N 找不到页大小至少为 "8192"、许可使用授权标识 "db2inst" 的缺省表空间。

    在 SQL 处理期间,它返回: SQL0286N  找不到页大小至少为 "8192".许可使用授权标识 "db2inst" 的缺省表空间. 顾名思义,DB2默认 ...

  3. xamarin.Android SQLite存储

    在可移植类库 新建: using SQLite.Net.Interop; using System; using System.Collections.Generic; using System.Li ...

  4. Exam E05-001 Information Storage and Management Version 3 Exam

    Emc 考试 e05-001信息存储和管理版本3考试 [总问题:171] 哪种 emc 产品提供软件定义的存储基础架构的自动监视和报告? A. viprSrmB. 斯纳普内C. 阿瓦马尔D. 快速副总 ...

  5. [转]关于浏览器css选择器性能优化

    作为一个前端开发, 我觉得很有必要了解浏览器对css选择器的解析,因为这个关系到页面的渲染,高效的方式.避开开销大的方式这些无疑为网站加载缩短了时间. 最近在新的项目中陷入了一个误区,也是出于对jqu ...

  6. CSS - 伪类和伪元素的区别

    伪类和伪元素皆独立于文档结构.它们获取元素的途径也不是基于id.class.属性这些基础的元素特征,而是在处于特殊状态的元素(伪类),或者是元素中特别的内容(伪元素).区别总结如下: CSS伪类 (P ...

  7. html active属性

    源代码 <div class="col-md-3"> <div class="list-group"> <a href=" ...

  8. L1 Cache, L2 Cache读取命中率与时钟周期计算

    CPU在Cache中找到有用的数据被称为命中,当Cache中没有CPU所需的数据时(这时称为未命中),CPU才访问内存.从理论上讲,在一颗拥有2级Cache的CPU中,读取L1 Cache的命中率为8 ...

  9. JVM知识(二):类加载器原理

    我们知道我们编写的java代码,会经过编译器编译成字节码(class文件),再把字节码文件装载到JVM中,最后映射到各个内存区域中,我们的程序就可以在内存中运行了.那么问题来了,这些字节码文件是怎么装 ...

  10. 1.Junit test使用

    1.导入maven依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</arti ...