|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
Иттераторы23.01.2010, 05:05. Показов 4101. Ответов 20
Метки нет (Все метки)
Никогда не пользовался, а теперь хочу разобраться. Запостите, пожалуйста ответы на вопросы:
1. Что такое иттераторы? 2. Как их делать? 3. Как ими пользоваться? 4. Каким образом при этом достигается ускорение?
0
|
|
| 23.01.2010, 05:05 | |
|
Ответы с готовыми решениями:
20
Инкапсуляция, иттераторы, абстрактные списки на С Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
9715 / 6470 / 52
Регистрация: 06.03.2009
Сообщений: 28,500
|
|
| 23.01.2010, 07:03 | |
|
настолько лень приложить усилие? http://ru.wikipedia.org/wiki/%... 0%BE%D1%80
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||||||||||
| 23.01.2010, 07:42 [ТС] | |||||||||||
|
Айси. Иттератор похож на указатель, но в операторах сложения/вычитания и инкремента/декремента проверяет выход за границу контейнера? Если я точно знаю, что у меня динамический массив, то в чём преимущество? Каким образом можно достичь ускорения по сравнению с индексом? Зачем мне вообще что добавлять в начало во время перебора? А если я добавлю хоть что то в динамический массив (даже в конец), то каким образом сохранятся адреса элементов массива? Индекс я могу сравнивать с нулём, что быстрее, а иттератор придётся сравнивать с указателем на вершину, что медленнее. По-моему перенос тормоза со сложения с базой в декремент адреса и всего делов. Подозреваю у себя ошибку. Где она?
Добавлено через 6 минут
Добавлено через 1 минуту Я не спорю, а не понимаю и задаю наводящие вопросы.
0
|
|||||||||||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
| 23.01.2010, 09:42 | |
|
Итератор похож на указатель, а не на индекс. В приведённом примере ты со своим итератором занулил бы всю доступную память, пока тебя не остановил бы сбой. Многие итераторы не проверяются, проверять их ты должен сам. В данном случае условие надо было написать как p>=c.begin();
Суть итераторов заключается в том, что они ИМИТИРУЮТ поведение указателей на массиве. Причём имитировать это поведение они могут и на других структурах данных - списках, деревьях и т.д. Таким образом ты можешь единообразно работать с разными по своей природе контейнерами, не заморачиваясь деталями их реализации. Аналогично, при разработке своих контейнеров имеет смысл разработать для них итераторы, имеющие такое же поведение. Эта идея замечательно развивается в понятии обобщённого программирования (см. хелп по <algorithm>). Сделанные в виде шаблонов функции вроде сортировки или перекидывания части элементов используют этот единообразный способ для того, чтобы работать с разными контейнерами. То есть, одна и та же std::sort способна сортировать и vector, и list, и deque, и твой собственный контейнер, если ты озаботился сделать для него совместимые итераторы.
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||||||||||||||||
| 27.01.2010, 05:46 [ТС] | |||||||||||||||||
Добавлено через 2 минуты Преимущество иттератора именно в универсальности? Не в скорости? Добавлено через 4 минуты
0
|
|||||||||||||||||
|
depict1
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
|
||
| 27.01.2010, 11:15 | ||
|
1
|
||
|
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
|
|||||||||||
| 28.01.2010, 04:55 | |||||||||||
|
что то типа этого, черт его знает, как правельнее сделать
похоже вот так:
1
|
|||||||||||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 28.01.2010, 05:01 [ТС] | |
|
Эйси.
1. Класс иттератора объявляется внутри класса контейнера. 2. В нём делаеются два конструктора: дефолтный и с параметром-указателем. 3. Единственное данное - указатель. 4. Объявляется оператор приведения к ссылке. Так? Добавлено через 1 минуту А что за оператор it? Добавлено через 2 минуты А можно в коде оператора-члена, объявленного в иттераторе, получить доступ к полям контейнера? Как?
0
|
|
|
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
|
|
| 28.01.2010, 05:18 | |
|
1-4 все так!!! но это мой собственный пример, в stl контейнирах в С++ итераторы описаны намного сложнее. и служат намного болие широким целям, у Бьерна Страуструпа в "Язык программирования C++" все описано по поводу итераторов и контейнеров.
важно что класс итератора внутри класса контейнера, потму что обычно это все шаблонные классы и класс итератора зависит от класса контейнера. остальное - как придется... it это не оператор ))) это же обькет - экземпляр класса TArray::iterator.нельзя!!! никак!!! в этом вся соль, больше абстракции - легче работа. например: ты же понятия не имеешь как устроен итератор стандартного контейнера map, а пользуешься им весьма эфективно! а между тем попробуй посмотри как он устоен - мозг можно поломать. так что не надо рыться в реалезации, надо просто очено точно и эфективно реализовывать интерфейс (доступные пользователю методы и поля данных) Comprenez-vous?
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||||||||||||||
| 28.01.2010, 05:37 [ТС] | |||||||||||||||
Добавлено через 2 минуты
0
|
|||||||||||||||
|
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
|
||||||
| 28.01.2010, 05:38 | ||||||
|
можно получить только если чрез другие итераторы, как и видно из релизации выше:
__________________________ для каждого конетейнера свой тип итератора и итераторы не наследуют какой то один базовый класс, а универсатьность есть: она проявлется в том что все функции из <algorithm> могут обрабатывать любые контейнеры, даже C-строки! только я не знаю как это реализовано, и тут не могу помоч ![]() дикремента у итераторов еще не встречал, но врядли это очень плохо...
0
|
||||||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||||||
| 28.01.2010, 05:43 [ТС] | |||||||
0
|
|||||||
|
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
|
||||||
| 28.01.2010, 05:44 | ||||||
0
|
||||||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||
| 28.01.2010, 05:47 [ТС] | ||
|
0
|
||
|
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
|
||||||
| 28.01.2010, 05:49 | ||||||
|
так, вощем проверку на выход за предел допустимого диапозона сам класс итератора не должен предусматривать, в stl контейнерах не предусмотренно, по крайней мере. надо это извне делать
вызывать внутри класса итератора функции-члены класс контейнера не получится. не зациклится, это для операций поиска делают.
))
0
|
||||||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||
| 28.01.2010, 05:57 [ТС] | ||
|
0
|
||
|
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
|
||||||
| 28.01.2010, 06:08 | ||||||
|
для прохода итератора от конца контейнера к началу делают
iterator TArray::rbegin() и iterator TArray::rend() - типа реверсивные begin() и end(). и вот у них operator++ будет гнать итератор от конца к началу.
0
|
||||||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||
| 28.01.2010, 06:09 [ТС] | ||
|
Допустим. пусть я иду от begin() и дошёл до конца.
0
|
||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 28.01.2010, 06:20 [ТС] | |
|
От произвольного элемента как перебирать? Предположим, я хочу перебрать от указателя на середину массива до начала. rbegin юзить нельзя, так как он начнёт с конца, а у меня конкретный указатель, с которого надо начать. Не указав реверс, цикл пойдём к концу, а мне надо к началу.
Добавлено через 46 секунд Другой тип? Понятно. Это решает и проблему произвольного старта. Добавлено через 55 секунд Но всё же каков end() для списка?
0
|
|
|
Новые блоги и статьи
|
||||
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|