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

反向迭代器: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的全排列》那篇文章里有具体的用法,非常好用!
分享到:
评论

相关推荐

    viper:现代的C ++仅标头填充程序库,可轻松操作容器和算法

    这就是为什么我们生成头文件的多个版本的原因,因此,较新版本不会受到C ++先前版本中缺少功能的阻碍。 “仅标头”是什么意思? 这意味着不需要单独的编译步骤。 这意味着与您的项目进行微不足道的集成,只需复制...

    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 ...

    LRU:用于列表的轻量级 LRU 缓存结构和地图容器。 用 C++11 编写

    LRU LRU 是一个轻量级的用于 list 和 map&lt;K&gt; 容器。 用 C++11 编写LRU 是独立的。 没有依赖性。 LRU 很小。 仅标题。 LRU 是跨平台的。... 插入键上的.find(K)会将元素提升到头部并返回实际的.begin()迭代器。 .f

    开源项目-cbegin-graven.zip

    开源项目-cbegin-graven.zip,Graven: Build management for Go projects.

    AVL_树

    将AVL树实现为具有双向迭代器Class接口的容器: template &lt; class xss=removed&gt;&gt; class BST { public: BST (); BST ( const BST &); BST& operator = ( const BST &); template void assign (InputIt, ...

Global site tag (gtag.js) - Google Analytics