读书人

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

发布时间: 2012-08-26 16:48:06 作者: rapoo

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

读书人网 >编程

热点推荐