Неверное значение List :: iterator - PullRequest
       3

Неверное значение List :: iterator

0 голосов
/ 28 сентября 2018

Итак, у меня есть ListOne и ListTwo, и оба содержат {9, 11, 12}. Однако в приведенном ниже коде мои итераторы, содержащие значения конца списка, содержат значение, которого даже нет в списке.РЕДАКТИРОВАТЬ: Итак, я обнаружил, что listOne.end () возвращает размер списка.Почему?

auto firstIteratorBegin = listOne.begin();
auto secondIteratorBegin = listTwo.begin();
auto firstIteratorEnd = listOne.end();
auto secondIteratorEnd = listTwo.end();

//Check if two lists are in the same range.
if(*firstIteratorEnd < *secondIteratorBegin || *secondIteratorEnd < *firstIteratorBegin)
{
    return false;
}

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Предполагая, что listOne является контейнером из стандартной библиотеки, listOne.end() дает вам итератор для конца-концов контейнера.

Разыменование такого итератора равно неопределенное поведение .

0 голосов
/ 28 сентября 2018

end() вернет итератор на позицию после последнего элемента контейнера, поэтому разыменование его не определено.

Если вы уже проверили, что списки не пустыи двунаправленные, вы можете получить итератор до последнего элемента, уменьшив значение конечного итератора один раз.В качестве альтернативы вы можете использовать rbegin, но это другой тип итератора.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...