Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
#1

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

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

Я в принципе понимаю, что такое иттератор, но нужно чёткое определение. И как формулировать, что такое цикл с иттератором и чем он отличается от цикла со счётчиком? И как точно пишется слово "иттератор" по-русски и по-английски?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2011, 09:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Иттераторы (C++):

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Инкапсул

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

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


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

Или воспользуйтесь поиском по форуму:
42
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
29.07.2011, 13:50  [ТС] #16
Цитата Сообщение от zuq Посмотреть сообщение
в той или иной степени действуют подобно
И это в определении?

Добавлено через 25 секунд
Цитата Сообщение от vitaly1981 Посмотреть сообщение
А чем стандартное определение итератора не устраивает?
А где его взять?
0
zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
29.07.2011, 13:51 #17
Цитата Сообщение от taras atavin Посмотреть сообщение
И это в определении?
Это дословная цитата из Шилдта...
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
29.07.2011, 13:55 #18
Цитата Сообщение от taras atavin Посмотреть сообщение
в той или иной степени действуют подобно
И это в определении?
taras atavin, сравни для примера реализацию оператора инкремента для вектора, списка и просто инкремент для int*, потому и сказано что подобно но не идентично
0
solar_wind
757 / 748 / 42
Регистрация: 06.07.2009
Сообщений: 2,970
Завершенные тесты: 1
29.07.2011, 13:55 #19
вот например:
http://ru.wikipedia.org/wiki/%D0%98%...D0%B8%D0%B5%29
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
29.07.2011, 14:11  [ТС] #20
Цитата Сообщение от Maxwe11 Посмотреть сообщение
taras atavin, сравни для примера реализацию оператора инкремента для вектора, списка и просто инкремент для int*
Мне нужна не агитация, а определение. А подобие имеет слишком нечёткое значение.

Добавлено через 1 минуту
Цитата Сообщение от zuq Посмотреть сообщение
Это дословная цитата из Шилдта...
Из какой книги? Я что то не помню у него итераторов.
0
zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
29.07.2011, 14:12 #21
Итератор — это класс, объект которого имеет частичную семантику указателя. Итераторы делятся по способу доступа на итераторы последовательного доступа и итераторы произвольного доступа. Итераторы последовательного доступа бывают однонаправленными и двунаправленными.
Может так

Добавлено через 51 секунду
Цитата Сообщение от taras atavin Посмотреть сообщение
Из какой книги? Я что то не помню у него итераторов.
"С++. Базовый курс"
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
29.07.2011, 14:26  [ТС] #22
zuq, а так: "итератором называется подобный счётчику цикла, но не являющийся таковым объект специального класса, который может использоваться только для доступа к элементам контейнера без раскрытия его структуры и в заголовке цикла полного перебора этого контейнера, дополнительно отличающийся от счётчика цикла тем, что для итератора не определено понятие шага и операторы сравнения, кроме симметричных, устанавливающих факт равенства, или неравенства, но не отвечающих на вопрос, какой из итераторов больше", "циклом с итератором называется цикл полного перебора контейнера без раскрытия его структуры, подобный циклу со счётчиком, но использующий вместо него подобный счётчику, но не являющийся таковым и называемый итератором объект специального класса, который может использоваться только в заголовке такого цикла и для доступа к элементам перебираемого контейнера и дополнительно отличается от счётчика тем, что что для итератора не определено понятие шага и операторы сравнения, кроме симметричных, устанавливающих факт равенства, или неравенства, но не отвечающих на вопрос, какой из итераторов больше" пойдёт?

Добавлено через 4 минуты
Цитата Сообщение от zuq Посмотреть сообщение
"С++. Базовый курс"
Понятно. А я читал его "Теорию и практику c++".
0
solar_wind
757 / 748 / 42
Регистрация: 06.07.2009
Сообщений: 2,970
Завершенные тесты: 1
29.07.2011, 14:26 #23
taras atavin, Если ты хочешь, что бы читающий окончательно запутался в этом термине, то пойдет )
0
zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
29.07.2011, 14:29 #24
Многабукф

Цитата Сообщение от taras atavin Посмотреть сообщение
цикл полного перебора контейнера
Не обязательно полного.
Цитата Сообщение от taras atavin Посмотреть сообщение
может использоваться только в заголовке такого цикла и для доступа к элементам перебираемого контейнера
Не только к элементам перебираемого контейнера.

Слишком сильно завязано на циклах. И определение действительно запутанное...
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
29.07.2011, 14:31 #25
taras atavin, А теперь смотрим реализацию например итераторов вектора) И радуемся. Это я на тему
, что для итератора не определено понятие шага и операторы сравнения, кроме симметричных, устанавливающих факт равенства, или неравенства, но не отвечающих на вопрос, какой из итераторов больше
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
29.07.2011, 14:33  [ТС] #26
Цитата Сообщение от zuq Посмотреть сообщение
Не только к элементам перебираемого контейнера.
А к чему ещё?
Цитата Сообщение от zuq Посмотреть сообщение
Слишком сильно завязано на циклах.
Нецикловую реализацию функции find в студию. Вызов ещё одной функции, в которую спрятан цикл, - это тоже использование цикла.
0
fasked
Эксперт С++
4951 / 2531 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.07.2011, 14:35 #27
taras atavin, почитайте GOF, там достаточно подробно описана идея итераторов. Конкретного определения то и нет ни у кого, это все же не математика

Цитата Сообщение от taras atavin Посмотреть сообщение
"итератором называется подобный счётчику цикла, но не являющийся таковым объект специального класса, который может использоваться только для доступа к элементам контейнера без раскрытия его структуры и в заголовке цикла полного перебора этого контейнера, дополнительно отличающийся от счётчика цикла тем, что для итератора не определено понятие шага и операторы сравнения, кроме симметричных, устанавливающих факт равенства, или неравенства, но не отвечающих на вопрос, какой из итераторов больше", "циклом с итератором называется цикл полного перебора контейнера без раскрытия его структуры, подобный циклу со счётчиком, но использующий вместо него подобный счётчику, но не являющийся таковым и называемый итератором объект специального класса, который может использоваться только в заголовке такого цикла и для доступа к элементам перебираемого контейнера и дополнительно отличается от счётчика тем, что что для итератора не определено понятие шага и операторы сравнения, кроме симметричных, устанавливающих факт равенства, или неравенства, но не отвечающих на вопрос, какой из итераторов больше" пойдёт?
Не пойдет, к чему все усложнять.
Во-первых понятие итераторов не надо привязывать к понятию циклов. В принципе вот отличное определение итератора (изображение). Точнее даже не придумаешь
Иттераторы
Это просто реализация способа получения доступа к элементам контейнера (агрегата).
0
zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
29.07.2011, 14:36 #28
Я один раз вызову find(). А потом могу делать с итератором "что угодно". Можно "шагать" не только инкрементно но и большими "шагами"
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
29.07.2011, 14:36  [ТС] #29
Цитата Сообщение от ForEveR Посмотреть сообщение
taras atavin, А теперь смотрим реализацию например итераторов вектора)
И где её посмотреть? Может я и криво сочинил, а как лучше? И если есть стандартное определение, то где оно валяется? Только не "в той или иной мере", а с чёткими указанием, в какой мере наблюдается подобие и в чём заключается отличие.
0
fasked
Эксперт С++
4951 / 2531 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.07.2011, 14:44 #30
Цитата Сообщение от taras atavin Посмотреть сообщение
Нецикловую реализацию функции find в студию.
Использовать итераторы вне циклов не запрещено. То есть вполне реально развернуть цикл с теми же итераторами.
C++
1
2
iterator it = container.begin();
cout << *it << cout *(it + 1) ... << cout *(it + n);
Здесь цикла нет, смысл то не в переборе элементов от начала до конца, а в доступе к элементам. То есть, представим себе любой контейнер:
C++
1
2
3
4
5
6
7
class ContainerItem {
     T data;
};
 
class Container {
      ContainerItem *items;
};
В любом случае, чтобы получить доступ к элементам, необходимо раскрыть как приватный член items, так и приватный член data. Чтобы этого не делать можно создать какой-либо оператор доступа. Это может быть operator[] или метод at, не так важно, либо можно создать итератор. По сути в этом и есть основная идея итератора, в сокрытии данных.
Однако, подобный подход (с методами доступа) менее гибкий, чем итераторы. То есть здесь нет никакого правила обхода контейнера, а итераторов может быть сколь угодно много и у каждого есть свое правило обхода. Например, последовательный обход или обход через одного, только элементы с четными или нечетными индексами, элементы, которые больше нуля или меньше нуля, много всяких-разных И чтобы получить еще одну модель обхода, программисту достаточно создать еще один итератор, и просто применить его в цикле. А не придумывать каждый раз мудреный цикл.
Но опять же с любым итератором я могу обойтись и без циклов.
Допустим, если итератор проходится по отрицательным числам в контейнере, тогда
C++
1
iterator it = container.begin()
будет "указывать" на первый отрицательный, и далее,
C++
1
iterator it2 = it + 1;
будет "указывать" на второй отрицательный. И этот второй отрицательный может иметь пятнадцатый индекс во всем контейнере.
0
29.07.2011, 14:44
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.