0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 5
|
||||||||||||||||
1 | ||||||||||||||||
C++: итераторы по умолчанию, пустые итераторы, end()01.11.2017, 15:04. Показов 8433. Ответов 9
Метки нет (Все метки)
Всем добра!
Вопрос на тему итераторов в плюсах: 1. какие значения имеют итераторы без инициализации например,
2. Существуют ли пустые итераторы? (что-то сравнимое
3. на сколько я понимаю, существует итератор с несуществующим значением
Можно ли итератор инициализировать вручную этим значением? Основная делема в том, чтобы хранить итераторы. В разных случаях нужно проверять, ссылается ли хранимый экземпляр итератора на существующий элемент контейнера? При чем, не факт что известного контейнера. Делитесь практикой, как вы это решаете? Заранее благодарен.
0
|
01.11.2017, 15:04 | |
Ответы с готовыми решениями:
9
Итераторы begin и end Реализовать итераторы begin() и end() для списка Итераторы и обратные итераторы Итераторы С++ |
Форумчанин
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
01.11.2017, 15:18 | 2 |
Например у std::istream_iterator итератор, созданный конструктором по умолчанию, считается концом ввода.
У всех свой смысл. Надо смотреть подробнее. У std::list<int>::iterator само по себе создание с параметром по умолчанию специального значения не имеет, да и использовать такой итератор не имеет смысла. Что вы вкладываете в это понятие? Итераторы, которые не указывают никуда? Возможно, вы хотите получить что-то, о чём я описал выше с std::istream_iterator? Вы вообще вправе написать свои итераторы и использовать их. И помимо прочего дать им доп. функции и особое значение, когда он не инициализирован. Вопрос только зачем. См выше про std::istream_iterator Добавлено через 48 секунд Только значением конкретного списка std::end(тип std::list<int>), либо тип std::list<int>.end() Добавлено через 21 секунду Обычно это не самая лучшая идея. Добавлено через 53 секунды Слишком много вариантов когда все итераторы превращаются в тыкву (вставка/удаление элементов из контейнера). А если у вас контейнер константный, то не понятно зачем вообще итераторы хранить. Добавлено через 51 секунду Это, кстати, больше походит на булев флаг. Возможно, вам стоит хранить и проверять его.
1
|
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 5
|
|
01.11.2017, 19:50 [ТС] | 3 |
Спасибо, довольно развернуто.
У меня есть функция(в STL подобные кстати тоже есть), она возвращает итератор. Хочу обрабатывать там исключения, для этого необходимо оттуда возвращать пустой итератор(или типа того) и ловить её в месте вызова функции, чтобы потом можно было сравнивать его на пустоту. Как лучше это написать по вашему?
0
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|
02.11.2017, 01:26 | 5 |
Гарантируется для всех ForwardIterator.
0
|
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 5
|
||||||
03.11.2017, 20:19 [ТС] | 6 | |||||
Искючения - отдельно. Мне нужно просто сравнить на Пустой итератор, делаю это так:
0
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|
04.11.2017, 03:23 | 7 |
Так и сравнивать - 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 как решение
Решение
Нет, такого точно нельзя. Возможность сравнения гарантированна только для однотипных итераторов.
0
|
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 5
|
|
04.11.2017, 06:27 [ТС] | 10 |
Всем спасибо! Тему можно закрывать.
0
|
04.11.2017, 06:27 | |
04.11.2017, 06:27 | |
Помогаю со студенческими работами здесь
10
итераторы си++ Итераторы Итераторы в C++ Итераторы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |