Обратный итератор не работает должным образом - PullRequest
4 голосов
/ 04 декабря 2010

Я использую обратный итератор для std::vector и по следующей ссылке:

http://www.cplusplus.com/reference/stl/vector/rbegin/

myVector.rbegin() - последний элемент вектора.В моем случае я получаю итератор past the end для rbegin() и элемент fist из rend().Я ожидал, что rend() даст мне past the end итератор и rbegin() даст мне последний элемент в контейнере.Я все понял неправильно?

Вот мой код, ничего особенного.Я ставлю точку останова сразу после назначения, и выше приведен результат, который я получаю в отладчике (VecDebugCubes - это определение типа для std::vector<myStructure>)

VecDebugCubes::reverse_iterator itr    = pActiveDebugCubes.rbegin();
VecDebugCubes::reverse_iterator itrEnd = pActiveDebugCubes.rend();
while (itr != itrEnd)
{
  (*itr)->printDebugValues();
  ++itr;
}

Ответы [ 2 ]

5 голосов
/ 04 декабря 2010

См. http://www.cplusplus.com/reference/std/iterator/reverse_iterator/base/.

Разыменование обратного итератора вернет значение, отличное от того, на которое вы указываете указатель в отладчике.

0 голосов
/ 04 декабря 2010

после конца для rbegin () и первого элемента для rend () - так должна работать итератор. Вот почему он называется обратным итератором. Он спроектирован таким образом, что вы можете использовать его в цикле for, не беспокоясь о том, чтобы ошибиться относительно начальной и конечной точек диапазона. Вы заметите, что для итератора можно использовать простой i ++, а итератор фактически выполняет итерацию в обратном направлении по диапазону. Я думаю, все, что вам нужно знать, это то, как это должно работать. Там нет ничего плохого. Это просто делает вашу жизнь проще, поскольку вы с меньшей вероятностью допустите ошибку, когда пишете для (i = beginAtTheEnd to finishAtTheStart и декремент-i-in-the-way-as-i-++) , а не имея для (i = 10; i> 0; i -) , где вы можете ошибиться, вставив i <0 </strong> или i> 1 в состояние. Это упрощенный пример. Вы оцените это больше, если захотите выполнить обратную итерацию для контейнера.

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