【STL】反向迭代器(Reverse Iterator)
来源:互联网 发布:北京握奇数据 编辑:程序博客网 时间:2024/06/05 07:08
1. 定义
反向迭代器(Reverse Iterator)是一种反向遍历容器的迭代器。也就是,从最后一个元素到第一个元素遍历容器。反向迭代器将自增(和自减)的含义反过来了:对于反向迭代器,++运算将访问前一个元素,而--运算则访问下一个元素。
2. 作用
(1)反向迭代器需要使用自减操作符:标准容器上的迭代器(reverse_iterator)既支持自增运算,也支持自减运算。但是,流迭代器由于不能反向遍历流,因此流迭代器不能创建反向迭代器。
(2)可以通过reverse_iterator::base()将反向迭代器转换为普通迭代器使用,从逆序得到普通次序。这是因为:有些容器的成员函数只接受iterator类型的参数,所以如果你想要在ri所指的位置插入一个新元素,你不能直接这么做,因为vector的insert函数不接受reverse_iterator。如果你想要删除ri 所指位置上的元素也会有同样的问题。erase成员函数会拒绝reverse_iterator,坚持要求iterator。为了完成删除和一些形式的插入操作,你必须先通过base函数将reverse_iterator转换成iterator,然后用iterator来完成工作。
3. 例子
反向迭代器(Reverse Iterator)是一种反向遍历容器的迭代器。也就是,从最后一个元素到第一个元素遍历容器。反向迭代器将自增(和自减)的含义反过来了:对于反向迭代器,++运算将访问前一个元素,而--运算则访问下一个元素。
2. 作用
(1)反向迭代器需要使用自减操作符:标准容器上的迭代器(reverse_iterator)既支持自增运算,也支持自减运算。但是,流迭代器由于不能反向遍历流,因此流迭代器不能创建反向迭代器。
(2)可以通过reverse_iterator::base()将反向迭代器转换为普通迭代器使用,从逆序得到普通次序。这是因为:有些容器的成员函数只接受iterator类型的参数,所以如果你想要在ri所指的位置插入一个新元素,你不能直接这么做,因为vector的insert函数不接受reverse_iterator。如果你想要删除ri 所指位置上的元素也会有同样的问题。erase成员函数会拒绝reverse_iterator,坚持要求iterator。为了完成删除和一些形式的插入操作,你必须先通过base函数将reverse_iterator转换成iterator,然后用iterator来完成工作。
3. 例子
- void test_reverse()
- {
- int a[] = {-2, -1, 0, 1, 2, 3, 4};
- std::list<int> lst(a, a + sizeof(a)/sizeof(int));
- std::copy(lst.begin(), lst.end(), std::ostream_iterator<int>(std::cout, " "));
- std::cout << std::endl;
- std::list<int>::reverse_iterator rit = lst.rbegin();
- while(rit != lst.rend())
- std::cout << *rit++ << " ";
- std::cout << std::endl;
- // 使用base()实现insert或erase等操作。
- std::vector<int> vect(a, a + sizeof(a)/sizeof(int));
- // 反向迭代器指向2
- std::vector<int>::reverse_iterator vrit = std::find(vect.rbegin(), vect.rend(), 2);
- // 注意:正向迭代器是指向3
- std::vector<int>::iterator it(vrit.base());
- inserter(vect, it) = 10;
- std::copy(vect.begin(), vect.end(), std::ostream_iterator<int>(std::cout, " "));
- std::cout << std::endl;
- }
输出结果:
- -2 -1 0 1 2 3 4
- 4 3 2 1 0 -1 -2
- -2 -1 0 1 2 10 3 4
- 请按任意键继续. . .
0 0
- 【STL】反向迭代器(Reverse Iterator)
- 【STL】反向迭代器(Reverse Iterator)
- 【STL】反向迭代器(Reverse Iterator)
- 反向迭代器(Reverse Iterator)
- stl 学习笔记14 Reverse Iterator
- 逆向迭代器 reverse iterator
- STL的迭代器--Iterator
- STL的迭代器--Iterator
- [STL基础]Iterator迭代器
- STL之iterator(迭代器)
- STL iterator(迭代器)
- stl之迭代器(iterator)
- STL Iterator 迭代器
- STL迭代器(iterator)
- STL----iterator 迭代器
- 【STL】反向迭代器
- C++ stl之迭代器(iterator)
- 【C++ STL系列】迭代器 iterator
- 【001】windows下搭建Objective-C开发环境
- cocos2d-x重复纹理与遮罩
- 基于短信的手机控制程序
- Python中 字典排序、列表排序
- oralce 去掉以某字符打头或者结尾
- 【STL】反向迭代器(Reverse Iterator)
- OpenCV1.0 训练分类器
- GitHub Android 开源项目汇总
- 自己的引擎和demo(二)
- PAT 1001. A+B Format (20)
- stm32IO口方向设置
- 线段树+树状数组+二分+划分树+主席树+hdu4417
- 高性能网络编程(一)----accept建立连接
- ios--XML解析类型介绍