我试图在循环中比较自定义迭代器。
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;
}
为什么会失败?
答案 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;
}