Не удается сравнить итератор std :: list с list :: back ()? - PullRequest
2 голосов
/ 29 марта 2012

У меня есть пользовательский шаблонный класс итератора, который оборачивает 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>'

Если я сравню itTypes с list::begin() или list::end(), у меня нет проблем. В документации, которую я просматривал для итераторов STL, говорится, что двунаправленные итераторы, используемые std :: list, поддерживают операторы сравнения равенства и неравенства. Есть ли причина, которую я не могу сравнить с list::back() тогда?

Ответы [ 3 ]

7 голосов
/ 29 марта 2012

Вы хотите end(). back() получает значение последнего элемента, который вообще не является итератором в списке.

1 голос
/ 03 апреля 2012

Функция begin() и end() возвращает итератор, а front() и back() возвращают ссылку на элемент

1 голос
/ 29 марта 2012

back () возвращает элемент, а не итератор. так что используйте код

return *itTypes != pList->back()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...