每个容器都有反向迭代器(无需关联容器除外),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. 资源在Windows编程中的应用

    学习目的 掌握菜单和对话框资源的创建和使用. 编写程序: 设计一个窗口应用程序, 其中有一个VC菜单, 该菜单下有"显示", "隐藏", "退出&qu ...

  2. 动态We API层(动态生成js)

    ABP动态webapi前端怎么调用? 研究abp项目时,页面js文件中一直不明白abp.services... 是从哪里来的 在调试SimpleTaskSystem的AngularJs demo时,一 ...

  3. Asp.Net Mvc表单提交(批量提交)

    Asp.Net Mvc中Action的参数可以自动接收和反序列化form表单的值, 采用form表单提交 name=value类型,只要Action参数的变量名和input的name相同就行 html ...

  4. 关于Dubbo异常之Data length too large

    最近几日发现生产环境项目打出的日志,每天都在30~50G以上,寻找多次发现问题: 首先查看日志只看到大批量的json数据输出,这是方法查询后的返回值输出,期初以为是自己打了logger,结果寻找多次, ...

  5. python 字符串居中

    下面的代码可以让字符串居中,左对齐和右对齐,字符串长度设置为50,居中后左右补充空格,右对齐会在左侧补充空格 string1 = "Now I am here." print( s ...

  6. xamarin.Android ImageView 异步加载网络图片

    /// <summary> /// 异步获取文件流 /// </summary> /// <param name="url"></para ...

  7. sublime text2 注册码

    近终于找到  sublime Text2 升级到 2.0.2 build 2221 64位 的破破解 输入注册码就成了 ----- BEGIN LICENSE ----- Andrew Weber S ...

  8. 为website安装免费的letsencrypt证书

    Certbot官网:https://certbot.eff.org 1. 安装certbot命令 wget https://dl.eff.org/certbot-auto chmod a+x cert ...

  9. Linux学习之CentOS(五)----网卡的配置

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  10. linux 局域网探测工具nmap

    NMap,也就是Network Mapper,是Linux下的网络扫描和嗅探工 具包,其基本功能有三个, 一是探测一组主机是否在线: 其次是扫描主机端口,嗅探所提供的网络服务: 还可以推断主机所用的操 ...