`
java-mans
  • 浏览: 11710410 次
文章分类
社区版块
存档分类
最新评论

反向迭代器:vector为什么要有cbegin和cend

 
阅读更多

有时候我们要写一些从数组的后面往前遍历的程序,但使用的却是正向迭代器。

比如:

typedef vector<int>::iterator iter;

iter last=--a.end();
for (iter i=last-1;i>=a.begin();i--)
{
for (iter j=last;j>=i+1;j--)
{
if ( *i < *j )
{
athwart=pair<iter,iter>(i,j);
return true;
}
}
}

这里for (iter i=last-1;i>=a.begin();i--)中的i--一定会在i到达a.begin()之后再执行一次,这种操作是被终止的。程序到这里就崩溃了。所以遇到了此类问题一定要使用反向迭代器。


typedef vector<int>::reverse_iterator riter;

bool exist_athwart(vector<int>& a,pair<riter,riter>& athwart)
{
riter first=a.rbegin();
for (riter i=first+1;i<a.rend();i++)
{
for (riter j=first;j<i;j++)
{
if (*j > *i )
{
athwart=pair<riter,riter>(j,i);
return true;
}
}
}
return false;

}

这种使用的完整例子在《生成从1到n的全排列》那篇文章里有具体的用法,非常好用!
分享到:
评论

相关推荐

    什么是C++的迭代器.docx

    更高级的迭代器支持更复杂的功能,如反向迭代器(reverse_iterator)用于反向遍历容器,以及输入和输出迭代器用于I/O操作。 总的来说,C++的迭代器是C++标准库中实现泛型编程和容器操作的核心工具,它们为程序员...

    Stl的list容器迭代器的用法1

    6. `crbegin()`、`crend()`: 类似于`rbegin()`和`rend()`,但返回常量反向迭代器。 **遍历list容器的示例** 下面的代码展示了如何使用`begin()`和`end()`以及`rbegin()`和`rend()`遍历`list`容器的元素: ```cpp #...

    C++ vector的讲解

    C++ Vector 的讲解 C++ Vector 是一种动态数组,封装了动态大小的数组,是一种顺序容器。...* 使用反向迭代器遍历元素(倒序输出):`for(vector&lt;int&gt;::reverse_iterator i=v.rbegin();i();i++){ cout*i;}`

    STL简单7终稿1

    - `rbegin()` 和 `rend()`:返回反向迭代器,用于从后向前遍历数组。 - `cbegin()`, `cend()`, `crbegin()`, `crend()`:提供常量迭代器版本,用于不改变元素的遍历。 - `size()`:返回数组中元素的数量,固定不变。...

    STL详细终稿431

    - **array::rbegin()**:返回一个反向迭代器,指向数组的最后一个元素。 - **array::rend()**:返回一个反向迭代器,指向数组的第一个元素之前的位置。 - **array::cbegin()**:返回一个常量迭代器,指向数组的第...

    STL容器和算法函数表

    - `reverse_iterator`: 反向迭代器,用于逆序遍历`vector`。 - `const_reverse_iterator`: 反向常量迭代器。 ##### 迭代器方法 - `begin()`: 返回指向`vector`首元素的迭代器。 - `end()`: 返回指向`vector`末元素...

    C++迭代器介绍(iterator、const_iterator、reverse_interator、const_reverse_interator)

    例如,`std::vector`和`std::array`的迭代器就是随机访问迭代器。 使用迭代器时,通常需要声明迭代器类型,如`string::iterator`,然后通过`begin()`和`end()`获取容器的首尾迭代器,用`for`循环遍历元素。解引用...

    stl的list容器1

    - `begin()`和`end()`返回指向容器首尾元素的迭代器,`rbegin()`和`rend()`返回对应的反向迭代器,方便遍历。 - `empty()`检查容器是否为空,`size()`返回元素数量,`max_size()`返回理论上的最大元素数量。 - 迭代...

    C++ Primer中文版(第5版)李普曼 等著 pdf 1/3

     10.4.3 反向迭代器 363  10.5 泛型算法结构 365  10.5.1 5类迭代器 365  10.5.2 算法形参模式 367  10.5.3 算法命名规范 368  10.6 特定容器算法 369  小结 371  术语表 371  第11章 关联容器 373  11.1 ...

    C++Primer(第5版 )中文版(美)李普曼等著.part2.rar

     10.4.3 反向迭代器 363  10.5 泛型算法结构 365  10.5.1 5类迭代器 365  10.5.2 算法形参模式 367  10.5.3 算法命名规范 368  10.6 特定容器算法 369  小结 371  术语表 371  第11章 关联容器 373  11.1 ...

Global site tag (gtag.js) - Google Analytics