登录

指针在C和C++ stl的微妙区别

在C语言中,对于指针,有效而正确的用法是保证他指向同一数组的元素或数组最后一个元素后端的元素past-end-one,但在C++ stl中由于“逆迭代器”的引入,只是他可以指向数组第一个元素前一端的元素past-start-one.如:

rend()== begin()-1;

我想问的是为什么他要这样设计,打破C语言习惯有什么更大的好处


# Go
大家讲道理 大家讲道理 2715 天前 1452 次浏览

全部回复(4) 我要回复

  • 代言

    代言2016-11-11 13:56:22

    你这是c语言和c++ with stl的区别。c++的指针和c没有任何区别。

    你所谓的

    rend()== begin()-1;
    并不是c++的指针,而是stl的`迭代器`。这个和指针不是相同的概念。

    c++没有打破c语言的任何习惯,只是扩展和加强。

    你可以完全使用c语言的语法在c++上写任何c语言可实现的特性。

         

    回复
    0
  • 代言

    代言2016-11-11 13:56:09

    迭代器和指针并不相等。对迭代器比较大小是不可取的,最好的办法就是用!=进行比较。所以,如果看过STL源码的话,你会发现这种设置非常巧妙而且方便。

    回复
    0
  • 代言

    代言2016-11-11 13:56:02

    这是为了做 != 比较,不然还得让迭代器支持 >=,<=

    回复
    0
  • 代言

    代言2016-11-11 13:55:55

    方便你反向循环访问啊。
    for (it = x.rbegin(); it != x.rend(); --i)
    因为每趟循环后要先进行--i,再判断是不是等于rend()。
    不能让it指向第一个元素就停止循环,那样第一个元素就没有被遍历到了。

    回复
    0
  • 取消 回复 发送