无法将 std::list 迭代器与 list::back()进行比较?

Can't compare std::list iterator to list::back()?

本文关键字:list 比较 std 迭代器 back      更新时间:2023-10-16

我有一个自定义迭代器模板类,用于封装std::list迭代器。在我的hasNext()方法中,我想检查迭代器是否引用了列表中的最后一项。然而,这个代码:

template< class Type >
...
virtual bool hasNext( void )
{
    return itTypes != pList->back();
}
...
typename std::list< Type > * pList;
typename std::list< Type >::iterator itTypes;

产生错误:

error C2678: binary '!=' : no operator found which takes a left-hand operand of type 'std::_List_iterator<_Mylist>'

如果我将itTypeslist::begin()list::end()进行比较,我没有问题。我看过的STL迭代器的文档说,std::list使用的双向迭代器支持等式和不等式比较运算符。那么,我不能与list::back()相比有什么原因吗?

您需要end()back()获取最后一个元素的,该元素根本不是列表中的迭代器。

back()返回元素而不是迭代器。所以使用代码

return *itTypes != pList->back()

begin()end()函数返回迭代器,而front()back()返回元素引用