2 / 2 / 0
Регистрация: 10.12.2010
Сообщений: 29
|
|||||||||||
1 | |||||||||||
Итератор для своего контейнерного класса-списка10.12.2010, 08:06. Показов 10700. Ответов 9
Метки нет (Все метки)
Здравствуйте.
Есть класс List, и мне надо помимо стандартных методов приделать к нему итератор.
Так же у меня есть код встраиваемого итератора,
Не по теме: Помогите, пожалуйста. Мой язык - Питон, а Си я, откровенно говоря, ненавижу. Но сейчас припёрло.
0
|
10.12.2010, 08:06 | |
Ответы с готовыми решениями:
9
Реализовать двусвязный список (list), итератор (iterator) и константный итератор (сonst_iterator) для списка Конструктор для контейнерного класса Свой итератор для своего шаблона Создание своего Event для своего класса |
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
|
|||||||||||
10.12.2010, 08:25 | 2 | ||||||||||
ну типа если есть двунаправленный список:
0
|
2 / 2 / 0
Регистрация: 10.12.2010
Сообщений: 29
|
|||||||||||
10.12.2010, 08:46 [ТС] | 3 | ||||||||||
Спасибо.
Этот класс-итератор надо встроить в класс-список и объявлять так же как обычный итератор?
0
|
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
|
||||||
10.12.2010, 09:46 | 4 | |||||
абсолютно верно, только в методе iterator end() надо возвращать поле tail, потому что это ссылка на последний элемент списка. Конструирование списка должно быть устроено так, чтобы при доступе к последнему элементу не приходилось проходить весь список. И не забыть унарный оператор *
что то я не заметил, а почему временная переменная e в посте №3 объявлена static? Если так то метод будет всегда одно и тоже возвращать (то что было при первом вызове метода).
1
|
2 / 2 / 0
Регистрация: 10.12.2010
Сообщений: 29
|
|||||||||||||||||||||
10.12.2010, 10:07 [ТС] | 5 | ||||||||||||||||||||
Ура! Работает.
Если ещё кому понадобится (или я что неправильно сделал, хотя работает): До public:
Статики убрал. Работает. Но когда я встраивал готовый итератор, тот что в <iterator> , компилятор выдавал что возвращается адрес локальной переменной.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
10.12.2010, 13:04 | 6 | |||||
Eliont, Список инициализации конструктора. Работает быстрее + лучше делать именно так.
Советую в самом списке написать
1
|
2 / 2 / 0
Регистрация: 10.12.2010
Сообщений: 29
|
|
10.12.2010, 15:09 [ТС] | 7 |
Тут ещё вопрос возник...
А чтобы сделать простой и константный итераторы надо повторить класс или можно как-то в одном?
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
10.12.2010, 17:34 | 8 | |||||
Eliont, По сути можно сделать так.
А вот по концепции лучше сделать еще один.
0
|
146 / 27 / 13
Регистрация: 21.09.2015
Сообщений: 62
|
||||||||||||||||
26.09.2017, 21:19 | 9 | |||||||||||||||
Вы написали такой цикл:
Для решения ситуации можно поступить так(если nullptr у Вас "конечный" указатель в списке):
Поправьте меня, если я не прав. В том же std::vector метод end() возвращает указатель на некий специальный "закрывающий" элемент(формально) но никак не на последний. Не по теме: Тема старая, но ошибка есть ошибка
0
|
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
|
|
26.09.2017, 22:05 | 10 |
У тебя есть ошибка но я покажу её тебе только через 7 лет ЖДИ!
0
|
26.09.2017, 22:05 | |
26.09.2017, 22:05 | |
Помогаю со студенческими работами здесь
10
ООП. Создание списка из своего класса Итератор для списка Итератор для класса Создать итератор для списка Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |