反向迭代器(rbegin, rend)及其与(begin, end)的关系

您所在的位置:网站首页 集合之间的区别与联系 反向迭代器(rbegin, rend)及其与(begin, end)的关系

反向迭代器(rbegin, rend)及其与(begin, end)的关系

2024-07-05 17:28| 来源: 网络整理| 查看: 265

C++ primer (中文版第四版)第273页

9.3.2 begin和end成员

        begin和end操作产生指向容器内第一个元素和最后一个元素的下一个位置的迭代器,如下所示。这两个迭代器通常用于标记包含容器中所有元素的迭代范围。

c.begin() 返回一个迭代器,它指向容器c的第一个元素

c.end() 返回一个迭代器,它指向容器c的最后一个元素的下一个位置

c.rbegin() 返回一个逆序迭代器,它指向容器c的最后一个元素

c.rend() 返回一个逆序迭代器,它指向容器c的第一个元素前面的位置

        上述每个操作都有两个不同的版本:一个是const成员,另一个是非const成员。这些操作返回什么类型取决于容器是否为const。如果容器不是const,则这些操作返回iterator或reverse_iterator类型。如果容器是const,则其返回类型要加上const_前缀,也就是const_iterator和const_reverse_iterator类型。

 

第353页

11.3.3 反向迭代器

        反向迭代器是一种反向遍历容器的迭代器。也就是,从最后一个元素到第一个元素遍历容器。反向迭代器将自增(和自减)的含义反过来了:对于反向迭代 器,++ 运算将访问前一个元素,而 -- 运算则访问下一个元素。

        回想一下,所有容器都定义了 begin 和 end 成员,分别返回指向容器首元素和尾元素下一位置的迭代器。容器还定义了 rbegin 和 rend 成员,分别返回指向容器尾元素和首元素前一位置的反向迭代器。与普通迭代器一样,反向迭代器也有常量(const)和非常量(nonconst)类型。图 1使用一个假设名为 vec 的 vector 类型对象阐明了这四种迭代器之间的关系。

图 1 比较 begin/end 和 rbegin/rend 迭代器

      假设有一个 vector 容器对象,存储 0-9 这 10 个以升序排列的数字:

[html]  view plain  copy vector vec;   for (vector::size_type i = 0; i != 10; ++i)         vec.push_back(i); // elements are 0,1,2,...9  

 

下面的 for 循环将以逆序输出这些元素:

[html]  view plain  copy // reverse iterator of vector from back to front   vector::reverse_iterator r_iter;   for (r_iter = vec.rbegin(); // binds r_iter to last element         r_iter != vec.rend(); // rend refers 1 before 1st element         ++r_iter) // decrements iterator one element       cout 


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3