С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/47: Рейтинг темы: голосов - 47, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 5

C++: итераторы по умолчанию, пустые итераторы, end()

01.11.2017, 15:04. Показов 8919. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добра!

Вопрос на тему итераторов в плюсах:
1.
какие значения имеют итераторы без инициализации
например,
C++
1
list<int>::iterator()
можно ли ими пользоваться?

2.
Существуют ли пустые итераторы? (что-то сравнимое
C++
1
с->empty()
)

3.
на сколько я понимаю, существует итератор с несуществующим значением
C++
1
2
list<int> x;
x->end();
этот end как раз и выдает это несуществующее значение.
Можно ли итератор инициализировать вручную этим значением?

Основная делема в том, чтобы хранить итераторы. В разных случаях нужно проверять, ссылается ли хранимый экземпляр итератора на существующий элемент контейнера? При чем, не факт что известного контейнера.
Делитесь практикой, как вы это решаете?

Заранее благодарен.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.11.2017, 15:04
Ответы с готовыми решениями:

Итераторы begin и end
Привет всем! Возникла проблема с итераторами. Пишу класс, который содержит вектор векторов. Пишу итератор к этому классу. Не получается...

Реализовать итераторы begin() и end() для списка
Есть список. и операции для него 1)разыменование 2)инкремент (префиксный и постфиксный) 3) == 4) != Для того,чтобы проверить...

Итераторы и обратные итераторы
У вектора есть два типа итераторов, обычные и обратные итераторы произвольного доступа... Обычные реализовал, осталось обратные. Решил...

9
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
01.11.2017, 15:18
Цитата Сообщение от tm-green Посмотреть сообщение
можно ли ими пользоваться?
Например у std::istream_iterator итератор, созданный конструктором по умолчанию, считается концом ввода.
У всех свой смысл. Надо смотреть подробнее. У std::list<int>::iterator само по себе создание с параметром по умолчанию специального значения не имеет, да и использовать такой итератор не имеет смысла.
Цитата Сообщение от tm-green Посмотреть сообщение
Существуют ли пустые итераторы?
Что вы вкладываете в это понятие? Итераторы, которые не указывают никуда?
Возможно, вы хотите получить что-то, о чём я описал выше с std::istream_iterator?

Вы вообще вправе написать свои итераторы и использовать их. И помимо прочего дать им доп. функции и особое значение, когда он не инициализирован. Вопрос только зачем.

Цитата Сообщение от tm-green Посмотреть сообщение
на сколько я понимаю, существует итератор с несуществующим значением
См выше про std::istream_iterator

Добавлено через 48 секунд
Цитата Сообщение от tm-green Посмотреть сообщение
Можно ли итератор инициализировать вручную этим значением?
Только значением конкретного списка std::end(тип std::list<int>), либо тип std::list<int>.end()

Добавлено через 21 секунду
Цитата Сообщение от tm-green Посмотреть сообщение
Основная делема в том, чтобы хранить итераторы.
Обычно это не самая лучшая идея.

Добавлено через 53 секунды
Цитата Сообщение от tm-green Посмотреть сообщение
В разных случаях нужно проверять, ссылается ли хранимый экземпляр итератора на существующий элемент контейнера?
Слишком много вариантов когда все итераторы превращаются в тыкву (вставка/удаление элементов из контейнера). А если у вас контейнер константный, то не понятно зачем вообще итераторы хранить.

Добавлено через 51 секунду
Цитата Сообщение от tm-green Посмотреть сообщение
ссылается ли хранимый экземпляр итератора на существующий элемент контейнера
Это, кстати, больше походит на булев флаг. Возможно, вам стоит хранить и проверять его.
1
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 5
01.11.2017, 19:50  [ТС]
Спасибо, довольно развернуто.
У меня есть функция(в STL подобные кстати тоже есть), она возвращает итератор. Хочу обрабатывать там исключения, для этого необходимо оттуда возвращать пустой итератор(или типа того) и ловить её в месте вызова функции, чтобы потом можно было сравнивать его на пустоту. Как лучше это написать по вашему?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
02.11.2017, 00:20
Цитата Сообщение от tm-green Посмотреть сообщение
Хочу обрабатывать там исключения, для этого необходимо оттуда возвращать пустой итератор(или типа того)
Так вы путаете исключение и код возврата. Если возбудить исключение, до возврата уже дело не дойдёт.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
02.11.2017, 01:26
Цитата Сообщение от tm-green Посмотреть сообщение
чтобы потом можно было сравнивать его на пустоту.
Гарантируется для всех ForwardIterator.
0
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 5
03.11.2017, 20:19  [ТС]
Искючения - отдельно. Мне нужно просто сравнить на Пустой итератор, делаю это так:
C++
1
return list<Note>::iterator();
Как правильно его сравнивать?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
04.11.2017, 03:23
Цитата Сообщение от tm-green Посмотреть сообщение
Как правильно его сравнивать?
Так и сравнивать - it==list<Note>::iterator(). Повторяю, корректность гарантируется для всех forward iterator. А у листа итераторы bidirectional, что включает в себя forward.
0
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 5
04.11.2017, 04:16  [ТС]
Renji,
Крайний вопросец, существует ли унифицированная форма пустого итератора? Можно ли сравнивать list::iterator() с map::iterator()? Спецификацию читать не хочется ради мелочи. Думаю если кто знает - всем будет полезно.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
04.11.2017, 05:47
Лучший ответ Сообщение было отмечено tm-green как решение

Решение

Цитата Сообщение от tm-green Посмотреть сообщение
Можно ли сравнивать list::iterator() с map::iterator()?
Нет, такого точно нельзя. Возможность сравнения гарантированна только для однотипных итераторов.
0
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 5
04.11.2017, 06:27  [ТС]
Всем спасибо! Тему можно закрывать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.11.2017, 06:27
Помогаю со студенческими работами здесь

Итераторы С++
Помогите, пожалуйста, надо написать две программы Задача 1 Напишите программу, использующую итераторы при чтении последовательности...

итераторы си++
подскажите пожалуйста какие существуют методы итераторов? и что они делают?

Итераторы
Добрый день! Начал изучать классы в C++ параллельно с итераторами. Решил сделать простенькую программу, которая создаёт список классов....

Итераторы в C++
Помогите плз решить 2 задачи Задача 1 Напишите программу, использующую итераторы при чтении последовательности строк со стандартного...

Итераторы
Как указать не на следующий за последним элемент последовательности, а на последний! end() - следующий за последним Добавлено через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru