在C语言中,对于指针,有效而正确的用法是保证他指向同一数组的元素或数组最后一个元素后端的元素past-end-one,但在C++ stl中由于“逆迭代器”的引入,只是他可以指向数组第一个元素前一端的元素past-start-one.如:
rend()== begin()-1;
我想问的是为什么他要这样设计,打破C语言习惯有什么更大的好处
光阴似箭催人老,日月如移越少年。
你这是c语言和c++ with stl的区别。c++的指针和c没有任何区别。
你所谓的
rend()== begin()-1;并不是c++的指针,而是stl的`迭代器`。这个和指针不是相同的概念。
c++没有打破c语言的任何习惯,只是扩展和加强。
你可以完全使用c语言的语法在c++上写任何c语言可实现的特性。
迭代器和指针并不相等。对迭代器比较大小是不可取的,最好的办法就是用!=进行比较。所以,如果看过STL源码的话,你会发现这种设置非常巧妙而且方便。
这是为了做 != 比较,不然还得让迭代器支持 >=,
方便你反向循环访问啊。for (it = x.rbegin(); it != x.rend(); --i)因为每趟循环后要先进行--i,再判断是不是等于rend()。不能让it指向第一个元素就停止循环,那样第一个元素就没有被遍历到了。
你这是c语言和c++ with stl的区别。c++的指针和c没有任何区别。
你所谓的
rend()== begin()-1;
并不是c++的指针,而是stl的`迭代器`。这个和指针不是相同的概念。
c++没有打破c语言的任何习惯,只是扩展和加强。
你可以完全使用c语言的语法在c++上写任何c语言可实现的特性。
迭代器和指针并不相等。对迭代器比较大小是不可取的,最好的办法就是用!=进行比较。所以,如果看过STL源码的话,你会发现这种设置非常巧妙而且方便。
这是为了做 != 比较,不然还得让迭代器支持 >=,
方便你反向循环访问啊。
for (it = x.rbegin(); it != x.rend(); --i)
因为每趟循环后要先进行--i,再判断是不是等于rend()。
不能让it指向第一个元素就停止循环,那样第一个元素就没有被遍历到了。