C++ sort函数问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 15:39:31
STL中的sort参数要求是RandomAccessIterator,可是为什么我对一个vector<int> v; 的排序时这样写:sort(&v[0], &v[5])也可以呢?
请问3楼的“Iterator的原型就是对象的引用”这话对么?

楼上有些不懂就不要误人子弟。

你首先要把RandomAccessItertor的概念(concept)搞清楚,STL里的迭代器大体如下:

Input ->
Forward -> Bidirectional ->Random -> Reverse
Output ->

它们支持的操作方法不同,比如Forward就不能加上一个常数后跳到另一个位置上去,只能不断地++。

指针既可以++也可以--,还可以加上一个常量,它自然是一个RandomAccessIterator,所以自然能用在sort上。

具体细节参考<C++ Standard Library>第7章

vector内部数据是连续存储的。
&v[0],下标操作符取得v的第一个元素,&操作符取得该元素的地址,
所以&v[0]是第一个元素的指针。
所以这和普通指针遍历内置数组是相同的。

呵呵,都行吧,不过一般还是习惯sort(v.begin(),v.end());

Iterator的原型就是对象的引用
你把v.begin()换成&v[0]是一样的

有标准写法 就不要用不标准的写法 很多时候没有哪么多为啥