2011-12-12 98 views
0

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

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

回答

1

原始的STL有一个design document on iterators

总之,它们是指针的泛化,因此==应该检查两个迭代器是否指向同一个容器中的同一项。指针迭代器的指针确实应该相等。

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

+0

这就是我所希望的,参见上文。 Thaks寻求答案。 – gilgamash

4

我认为你需要阅读的东西是这样的:http://stdcxx.apache.org/doc/stdlibref/iterators.html

运营商==!=比较迭代器,而不是他们参考的数据。

+0

伟大的,这是我所希望的和我期待的。感谢您的链接。我和一位实施自己的Iterator嵌套类的同事发生了争执,并对数据进行了比较,这些数据与.end()或类似的相比会导致严重的问题。 – gilgamash

0

==和!=操作符不需要比较内容,它们只是检查两个迭代器是否引用同一个对象。