比较自定义迭代器

时间:2013-09-04 20:05:55

标签: c++

我试图在循环中比较自定义迭代器。

for(auto i = list.begin(); !(i == list.end()); ++i) {

}

此代码会产生以下错误。

Invalid operands to binary expression 
('List<double>::iterator' and 'List<double>::iterator')

但我确实实现了比较运算符。

class iterator: public std::iterator<std::bidirectional_iterator_tag, value_type> {
    const element *current;
public:
    const bool operator==( iterator &rhs) const {
            return current == rhs.current;
    }

为什么会失败?

2 个答案:

答案 0 :(得分:0)

因为您要返回const bool 将运算符重载更改为

const bool operator==(const iterator &rhs) const{
            return current == rhs.current;
    }

答案 1 :(得分:0)

非常量左值引用无法绑定到临时值(例如list.end())。幸运的是,您不需要改变比较器中的迭代器,因此可以通过常量引用传递它们:

const bool operator==(const iterator &rhs) const
{
    return current == rhs.current;
}