Список STL и итераторы - PullRequest
       7

Список STL и итераторы

0 голосов
/ 20 марта 2011

Здравствуйте, я просто не могу заставить его работать. У меня есть структура с 4 членами и я создаю список и итератор:

std::list<structure> one;
std::list<structure>::iterator two;

Теперь я хочу получить доступ к элементу:

one.end-1;
two = one.end()-1;

не работает>.> Компилятор выдает 14 ошибок.

Ошибки идут как:

Все они выглядят примерно так:

Glowne.cpp (105): ошибка C2784: «Reverse_iterator <_RanIt> :: difference_type std :: operator - (const std :: reverse_iterator <_RanIt> &, const std :: reverse_iterator <_RanIt2> &) ': не удалось вывести аргумент шаблона для 'const std :: reverse_iterator <_RanIt> &' от 'Станд :: Список <_Ty> :: _ итератора <_Secure_validation>' с [_Ty = Клиентом, _Secure_validation = true]

Все работает отлично, спасибо, что упомянули метод back, действительно, ребята. Вы великолепны.

Ответы [ 3 ]

6 голосов
/ 20 марта 2011

Двунаправленные итераторы (используемые std::list) не поддерживают «арифметику указателей», только отдельные шаги:

two = one.end();
--two;

Кроме того, утверждение one.end-1; не имеет абсолютно никакого эффекта, я бы от этого избавился.

4 голосов
/ 20 марта 2011

Если вы хотите последний элемент списка, используйте элемент back().

1 голос
/ 20 марта 2011

Список не является контейнером произвольного доступа, это означает, что вы не можете использовать арифметические операции на его итераторах.

Для перемещения по списку вы можете использовать операторы ++ и -- для перемещения итератора на один элемент. Если вы хотите перейти в произвольную позицию, используйте что-то другое, например std :: vector, вместо этого.

Большинство контейнеров имеют метод front() и back() для доступа к первому и последнему элементу.

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