首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-08-26 
反向迭代器:vector为什么要有cbegin和cend有时候我们要写一些从数组的后面往前遍历的程序,但使用的却是正

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

热点排行