Форум программистов, компьютерный форум CyberForum.ru

Иттераторы - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.07.2011, 09:09     Иттераторы #1
Я в принципе понимаю, что такое иттератор, но нужно чёткое определение. И как формулировать, что такое цикл с иттератором и чем он отличается от цикла со счётчиком? И как точно пишется слово "иттератор" по-русски и по-английски?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2011, 09:09     Иттераторы
Посмотрите здесь:

Иттераторы C++
Инкапсуляция, иттераторы, абстрактные списки на С C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
solar_wind
 Аватар для solar_wind
740 / 731 / 39
Регистрация: 06.07.2009
Сообщений: 2,937
Завершенные тесты: 1
29.07.2011, 09:14     Иттераторы #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от taras atavin Посмотреть сообщение
чем он отличается от цикла со счётчиком?
Способом доступа к данным, для работы с которыми сделан цикл.


Цитата Сообщение от taras atavin Посмотреть сообщение
И как формулировать, что такое цикл с иттератором
Итератор (от англ. iterator) — объект, позволяющий программисту перебирать все элементы коллекции без учёта особенностей её реализации. Итератор иногда также называют курсором, особенно если речь идет о базе данных. В простейшем случае итератором в низкоуровневых языках является указатель.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
29.07.2011, 09:18     Иттераторы #3
Цитата Сообщение от vitaly1981 Посмотреть сообщение
Способом доступа к данным, для работы с которыми сделан цикл
способ доступа тот же что и у []
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
29.07.2011, 09:19     Иттераторы #4
taras atavin, есть паттерн Итератор в книжке Банды четырех. Еще у Джефа Элджера про курсоры много есть.
solar_wind
 Аватар для solar_wind
740 / 731 / 39
Регистрация: 06.07.2009
Сообщений: 2,937
Завершенные тесты: 1
29.07.2011, 09:25     Иттераторы #5
Maxwe11, Если подходить с точки зрения доступа к данным на низком уровне, то в некоторых случаях они совпадают, но далеко не всегда.
На уровне непосредственно интерфейса, доступ по счетчику и доступ через объект это разные вещи. Счетчик, как минимум, подразумевает наличие порядкового номера каждой части данных, доступ через объект вообще абстрагируется от конкретного представления данных и не накладывает ограничения по наличию каких то свойств порядка.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.07.2011, 10:41  [ТС]     Иттераторы #6
Допустимы ли такие определения: "Итератором называется счётчик цикла специального типа, который может быть использован только в заголовке цикла и для последовательного доступа к элементам некоторого контейнера без раскрытия его структуры и может меняться только с единичным шагом", "Циклом с итератором называется цикл последовательного перебора элементов некоторого контейнера без раскрытия его структуры с имеющим строго единичный шаг и называемым итератором счётчиком специального типа, который может быть использован только в заголовке такого цикла и для последовательного доступа к элементам контейнера"?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.07.2011, 10:44     Иттераторы #7
taras atavin, "Циклом с итератором называется цикл со счётчиком специального типа, который может быть использован только в заголовке и для последовательного доступа к элементам некоторого контейнера без раскрытия его структуры и может меняться только с единичным шагом"?

Не-а. Итератор произвольного доступа никто не мешает переместить на сколько нужно элементов вперед.
Итератор - это концепция для обхода элементов контейнера, не раскрывая сущность контейнера и тип данных внутри него.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.07.2011, 10:52  [ТС]     Иттераторы #8
Цитата Сообщение от ForEveR Посмотреть сообщение
Итератор произвольного доступа
То есть? Мне казалось, что итератор предназначен для последовательного, а не случайного перебора.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.07.2011, 10:55     Иттераторы #9
taras atavin, На вектор посмотрите ради интереса)
solar_wind
 Аватар для solar_wind
740 / 731 / 39
Регистрация: 06.07.2009
Сообщений: 2,937
Завершенные тесты: 1
29.07.2011, 10:57     Иттераторы #10
taras atavin, Ну представь корзину в которой валяется множество мячей, тебе нужно их все выбрать. Тебе каждый раз дают какой то из мячей, причем при разных обходах совершенно нет гарантии что порядок будет тот же. Вот это итератор. Говорить тут вообще о каком то единичном или не единичном шаге впринципе некорректно, потому что тут шагов нет, есть набор элементов, которые тебе дают пока они все не закончатся.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.07.2011, 10:57  [ТС]     Иттераторы #11
А так: "Итератором называется счётчик цикла специального типа, который может быть использован только для доступа к элементам некоторого контейнера без раскрытия его структуры и в заголовке цикл перебора всех элементов этого контейнера", "Циклом с итератором называется цикл перебора всех элементов некоторого контейнера без раскрытия его структуры с называемым итератором счётчиком специального типа, который может быть использован только в заголовке такого цикла и для доступа к элементам перебираемого контейнера"?
solar_wind
 Аватар для solar_wind
740 / 731 / 39
Регистрация: 06.07.2009
Сообщений: 2,937
Завершенные тесты: 1
29.07.2011, 11:02     Иттераторы #12
taras atavin, ну можно и так выразится, единственное "счетчик цикла"....итератор вообщем то не является как таковым счетчиком....
А чем стандартное определение итератора не устраивает?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
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"));
zuq
 Аватар для zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
29.07.2011, 11:53     Иттераторы #14
Можно сформулировать так
Итераторы - это объекты, которые в той или иной степени действуют подобно указателям. Они позволяют циклически опрашивать содержимое контейнера, практически так же, как это делается с помощью указателя при циклическом опросе элементов массива
Добавлено через 16 минут
Цитата Сообщение от taras atavin Посмотреть сообщение
Мне казалось, что итератор предназначен для последовательного, а не случайного перебора.
Существует 5 типов итераторов: Произвольного доступа, Двунаправленные(обеспечивают инкрементное и декрементное перемещение), Однонаправленные(только инкрементное перемещение), Входные(только инкрементное перемещение) и Выходные(только инкрементное)..

Первые три типа позволяют сохранять и считывать элементы контейнера. Входные только считывают, выходные - только записывают.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
29.07.2011, 13:18     Иттераторы #15
Страуструп 1ой из причин использования итераторов заместо [] называет большую переносимость, при изменении к примеру vector на list
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.07.2011, 13:50  [ТС]     Иттераторы #16
Цитата Сообщение от zuq Посмотреть сообщение
в той или иной степени действуют подобно
И это в определении?

Добавлено через 25 секунд
Цитата Сообщение от vitaly1981 Посмотреть сообщение
А чем стандартное определение итератора не устраивает?
А где его взять?
zuq
 Аватар для zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
29.07.2011, 13:51     Иттераторы #17
Цитата Сообщение от taras atavin Посмотреть сообщение
И это в определении?
Это дословная цитата из Шилдта...
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
29.07.2011, 13:55     Иттераторы #18
Цитата Сообщение от taras atavin Посмотреть сообщение
в той или иной степени действуют подобно
И это в определении?
taras atavin, сравни для примера реализацию оператора инкремента для вектора, списка и просто инкремент для int*, потому и сказано что подобно но не идентично
solar_wind
 Аватар для solar_wind
740 / 731 / 39
Регистрация: 06.07.2009
Сообщений: 2,937
Завершенные тесты: 1
29.07.2011, 13:55     Иттераторы #19
вот например:
http://ru.wikipedia.org/wiki/%D0%98%...D0%B8%D0%B5%29
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.07.2011, 14:11  [ТС]     Иттераторы #20
Цитата Сообщение от Maxwe11 Посмотреть сообщение
taras atavin, сравни для примера реализацию оператора инкремента для вектора, списка и просто инкремент для int*
Мне нужна не агитация, а определение. А подобие имеет слишком нечёткое значение.

Добавлено через 1 минуту
Цитата Сообщение от zuq Посмотреть сообщение
Это дословная цитата из Шилдта...
Из какой книги? Я что то не помню у него итераторов.
Yandex
Объявления
29.07.2011, 14:11     Иттераторы
Ответ Создать тему
Опции темы

Текущее время: 02:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru