【问题标题】:C++ iterator operator definitionC++ 迭代器运算符定义
【发布时间】:2011-12-12 12:35:28
【问题描述】:

关于迭代器运算符如何工作的“定义”的任何想法或链接?更准确地说:例如,必须实现运算符“==”和“!=”-他们是否必须比较他们持有的数据的成员(恕我直言,这将是一个问题,作为迭代器首先不应该知道数据)?你与 .end() 和 .start() 相比如何?对于指针迭代器:它只是一个地址检查吗?

很高兴听到您的想法或获得定义的链接。

【问题讨论】:

    标签: c++ iterator overloading operator-keyword


    【解决方案1】:

    我认为您需要阅读以下内容:http://stdcxx.apache.org/doc/stdlibref/iterators.html

    运算符==!= 比较迭代器,而不是它们引用的数据。

    【讨论】:

    • 太好了,这就是我所希望的,也是我所期待的。感谢您的链接。我和一个同事发生了争吵,他实现了自己的 Iterator 嵌套类并比较了数据,这在与 .end() 或类似的比较时会导致严重的问题。
    【解决方案2】:

    原来的 STL 有一个design document on iterators

    简而言之,它们是指针的泛化,所以== 应该检查两个迭代器是否指向同一个容器中的同一个项目。指针迭代器的指针确实应该比较相等。

    begin()rbegin() 相比应该是微不足道的;与end()rend() 进行比较可以通过多种方式完成,例如使其成为等于容器的size() 的索引。

    【讨论】:

    • 这就是我所希望的,见上文。谢谢你的回答。
    【解决方案3】:

    == 和 != 运算符不应该比较内容,它们只是检查两个迭代器是否引用同一个对象。

    【讨论】:

      猜你喜欢
      • 2017-02-22
      • 1970-01-01
      • 2020-06-14
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      相关资源
      最近更新 更多