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

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

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

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

Вопрос на тему итераторов в плюсах:
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) ==...

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

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

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

Решение

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации. Исполнитель Чертежник работает на координатной плоскости, где может. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru