0

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

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;
    }

为什么会失败?

4

2 回答 2

0

由于您要返回const bool 更改,因此您的运算符重载为

const bool operator==(const iterator &rhs) const{
            return current == rhs.current;
    }
于 2013-09-04T20:12:05.640 回答
0

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

const bool operator==(const iterator &rhs) const
{
    return current == rhs.current;
}
于 2013-09-04T20:12:18.117 回答