Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
1

Иттераторы

29.07.2011, 09:09. Показов 3136. Ответов 42
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я в принципе понимаю, что такое иттератор, но нужно чёткое определение. И как формулировать, что такое цикл с иттератором и чем он отличается от цикла со счётчиком? И как точно пишется слово "иттератор" по-русски и по-английски?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.07.2011, 09:09
Ответы с готовыми решениями:

Иттераторы
Никогда не пользовался, а теперь хочу разобраться. Запостите, пожалуйста ответы на вопросы: 1. Что...

Инкапсуляция, иттераторы, абстрактные списки на С
Сразу подчеркиваю, что реализовать программу надо на С, а не на С++, что, собственно и портит всю...


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

Или воспользуйтесь поиском по форуму:
42
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
29.07.2011, 09:14 2
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от taras atavin Посмотреть сообщение
чем он отличается от цикла со счётчиком?
Способом доступа к данным, для работы с которыми сделан цикл.


Цитата Сообщение от taras atavin Посмотреть сообщение
И как формулировать, что такое цикл с иттератором
Итератор (от англ. iterator) — объект, позволяющий программисту перебирать все элементы коллекции без учёта особенностей её реализации. Итератор иногда также называют курсором, особенно если речь идет о базе данных. В простейшем случае итератором в низкоуровневых языках является указатель.
3
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
29.07.2011, 09:18 3
Цитата Сообщение от vitaly1981 Посмотреть сообщение
Способом доступа к данным, для работы с которыми сделан цикл
способ доступа тот же что и у []
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
29.07.2011, 09:19 4
taras atavin, есть паттерн Итератор в книжке Банды четырех. Еще у Джефа Элджера про курсоры много есть.
0
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
29.07.2011, 09:25 5
Maxwe11, Если подходить с точки зрения доступа к данным на низком уровне, то в некоторых случаях они совпадают, но далеко не всегда.
На уровне непосредственно интерфейса, доступ по счетчику и доступ через объект это разные вещи. Счетчик, как минимум, подразумевает наличие порядкового номера каждой части данных, доступ через объект вообще абстрагируется от конкретного представления данных и не накладывает ограничения по наличию каких то свойств порядка.
1
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
29.07.2011, 10:41  [ТС] 6
Допустимы ли такие определения: "Итератором называется счётчик цикла специального типа, который может быть использован только в заголовке цикла и для последовательного доступа к элементам некоторого контейнера без раскрытия его структуры и может меняться только с единичным шагом", "Циклом с итератором называется цикл последовательного перебора элементов некоторого контейнера без раскрытия его структуры с имеющим строго единичный шаг и называемым итератором счётчиком специального типа, который может быть использован только в заголовке такого цикла и для последовательного доступа к элементам контейнера"?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
29.07.2011, 10:44 7
taras atavin, "Циклом с итератором называется цикл со счётчиком специального типа, который может быть использован только в заголовке и для последовательного доступа к элементам некоторого контейнера без раскрытия его структуры и может меняться только с единичным шагом"?

Не-а. Итератор произвольного доступа никто не мешает переместить на сколько нужно элементов вперед.
Итератор - это концепция для обхода элементов контейнера, не раскрывая сущность контейнера и тип данных внутри него.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
29.07.2011, 10:52  [ТС] 8
Цитата Сообщение от ForEveR Посмотреть сообщение
Итератор произвольного доступа
То есть? Мне казалось, что итератор предназначен для последовательного, а не случайного перебора.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
29.07.2011, 10:55 9
taras atavin, На вектор посмотрите ради интереса)
0
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
29.07.2011, 10:57 10
taras atavin, Ну представь корзину в которой валяется множество мячей, тебе нужно их все выбрать. Тебе каждый раз дают какой то из мячей, причем при разных обходах совершенно нет гарантии что порядок будет тот же. Вот это итератор. Говорить тут вообще о каком то единичном или не единичном шаге впринципе некорректно, потому что тут шагов нет, есть набор элементов, которые тебе дают пока они все не закончатся.
1
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
29.07.2011, 10:57  [ТС] 11
А так: "Итератором называется счётчик цикла специального типа, который может быть использован только для доступа к элементам некоторого контейнера без раскрытия его структуры и в заголовке цикл перебора всех элементов этого контейнера", "Циклом с итератором называется цикл перебора всех элементов некоторого контейнера без раскрытия его структуры с называемым итератором счётчиком специального типа, который может быть использован только в заголовке такого цикла и для доступа к элементам перебираемого контейнера"?
0
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
29.07.2011, 11:02 12
taras atavin, ну можно и так выразится, единственное "счетчик цикла"....итератор вообщем то не является как таковым счетчиком....
А чем стандартное определение итератора не устраивает?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
29.07.2011, 11:02 13
taras atavin, Почему итератор это счетчик цикла?
Ну где тут счетчик цикла, а?

C++
1
2
3
4
5
6
7
std::vector<int> vec{1,2,3,4,5,6};
std::vector<int>::iterator iter = std::find(vec.begin(), vec.end(), 4);
if(iter != vec.end())
{
   vec.erase(iter);
}
std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, "\n"));
0
95 / 95 / 5
Регистрация: 10.04.2011
Сообщений: 256
29.07.2011, 11:53 14
Можно сформулировать так
Итераторы - это объекты, которые в той или иной степени действуют подобно указателям. Они позволяют циклически опрашивать содержимое контейнера, практически так же, как это делается с помощью указателя при циклическом опросе элементов массива
Добавлено через 16 минут
Цитата Сообщение от taras atavin Посмотреть сообщение
Мне казалось, что итератор предназначен для последовательного, а не случайного перебора.
Существует 5 типов итераторов: Произвольного доступа, Двунаправленные(обеспечивают инкрементное и декрементное перемещение), Однонаправленные(только инкрементное перемещение), Входные(только инкрементное перемещение) и Выходные(только инкрементное)..

Первые три типа позволяют сохранять и считывать элементы контейнера. Входные только считывают, выходные - только записывают.
0
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
29.07.2011, 13:18 15
Страуструп 1ой из причин использования итераторов заместо [] называет большую переносимость, при изменении к примеру vector на list
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
29.07.2011, 13:50  [ТС] 16
Цитата Сообщение от zuq Посмотреть сообщение
в той или иной степени действуют подобно
И это в определении?

Добавлено через 25 секунд
Цитата Сообщение от vitaly1981 Посмотреть сообщение
А чем стандартное определение итератора не устраивает?
А где его взять?
0
95 / 95 / 5
Регистрация: 10.04.2011
Сообщений: 256
29.07.2011, 13:51 17
Цитата Сообщение от taras atavin Посмотреть сообщение
И это в определении?
Это дословная цитата из Шилдта...
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
29.07.2011, 13:55 18
Цитата Сообщение от taras atavin Посмотреть сообщение
в той или иной степени действуют подобно
И это в определении?
taras atavin, сравни для примера реализацию оператора инкремента для вектора, списка и просто инкремент для int*, потому и сказано что подобно но не идентично
0
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
29.07.2011, 13:55 19
вот например:
http://ru.wikipedia.org/wiki/%... 8%D0%B5%29
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
29.07.2011, 14:11  [ТС] 20
Цитата Сообщение от Maxwe11 Посмотреть сообщение
taras atavin, сравни для примера реализацию оператора инкремента для вектора, списка и просто инкремент для int*
Мне нужна не агитация, а определение. А подобие имеет слишком нечёткое значение.

Добавлено через 1 минуту
Цитата Сообщение от zuq Посмотреть сообщение
Это дословная цитата из Шилдта...
Из какой книги? Я что то не помню у него итераторов.
0
29.07.2011, 14:11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru