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

Какие преимущества дают итераторы? - C++

Восстановить пароль Регистрация
 
Knjagskij
-4 / 6 / 0
Регистрация: 10.11.2008
Сообщений: 772
Завершенные тесты: 1
10.11.2015, 16:16     Какие преимущества дают итераторы? #1
Доброго времени суток!
Подскажите пожалуйста, какие преимущества дают итераторы по сравнению с обычным обращением к элементу массива?
Можете привести пример, если не сложно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2015, 16:16     Какие преимущества дают итераторы?
Посмотрите здесь:

Итераторы C++
Итераторы C++
C++ Итераторы
итераторы си++ C++
итераторы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
pproger
162 / 65 / 13
Регистрация: 22.03.2011
Сообщений: 188
10.11.2015, 16:34     Какие преимущества дают итераторы? #2
Knjagskij,
существуют такие контейнеры, в которых обращение к элементу не осуществляется за постоянное время, например std::list. если ты хочешь в цикле обойти этот контейнер и постоянно будешь обращаться к элементу через operator[] это будет неэффективно.
Andreas_Kara
32 / 32 / 17
Регистрация: 26.10.2015
Сообщений: 94
10.11.2015, 17:22     Какие преимущества дают итераторы? #3
pproger, в std::list разве перегружен operator[]?
pproger
162 / 65 / 13
Регистрация: 22.03.2011
Сообщений: 188
10.11.2015, 17:28     Какие преимущества дают итераторы? #4
Andreas_Kara, да, чота я совсем эти ваши кресты забыл. ну вот как раз пример, почему он не перегружен)
Knjagskij
-4 / 6 / 0
Регистрация: 10.11.2008
Сообщений: 772
Завершенные тесты: 1
15.11.2015, 13:54  [ТС]     Какие преимущества дают итераторы? #5
Т.е.основная проблема в скорости обращения? А может быть такая ситуация, когда итератор менее эффективен, чем обращение по номеру
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2133 / 966 / 222
Регистрация: 30.11.2013
Сообщений: 3,224
15.11.2015, 14:02     Какие преимущества дают итераторы? #6
Итератор это указатель на элеммент контейнера, в данном контексте вопроса.

И теперь ваш вопрос: "чем отличается инструмент использующийся при обращения к noda'м (итератор) и способ обращения (обращение по индексу). Что за сравнения холодного и зелёного?

+ Адресс найденого Nod'a можно сохранить и избежать повторного поиска его в дальнейшем (в частных случаях, когда в пределах одного алгоритма не меняется содержимое контейнера и/или поиск элеммента в контейне процесс дорогостоящий).
+ Итератор сразу даст адресс, когда обращение через индекс(для контейнеров где это возможно) начнёт адрессную арифметику (старт + смещение)
- итератор это доп. переменная
- значение итератора не валидно после ряда операций с контейнером(какие почитайте в описании методов)
Убежденный
Системный программист
 Аватар для Убежденный
14175 / 6190 / 982
Регистрация: 02.05.2013
Сообщений: 10,298
Завершенные тесты: 1
15.11.2015, 18:19     Какие преимущества дают итераторы? #7
Цитата Сообщение от Knjagskij Посмотреть сообщение
какие преимущества дают итераторы по сравнению с обычным обращением к элементу массива?
Обобщенность. С разными контейнерами иногда можно работать
идентичным образом, используя итераторы:
C++
1
2
3
4
for (container_t::iterator it = Con.begin(); it != Con.end(); ++it)
{
    // ...
}
container_t - это может быть vector, например. Или map. Или еще что-нибудь.
Код цикла при этом останется неизменным.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2015, 18:33     Какие преимущества дают итераторы?
Еще ссылки по теме:

C++ Итераторы
C++ какие преимущества дает интерфейсное программирование?
Компиляторы. Какие преимущества между "кнопкой" и консолью? C++

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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4838 / 2977 / 367
Регистрация: 10.11.2010
Сообщений: 11,009
Записей в блоге: 10
Завершенные тесты: 1
15.11.2015, 18:33     Какие преимущества дают итераторы? #8
Цитата Сообщение от Убежденный Посмотреть сообщение
Или еще что-нибудь.
... например обычный Си-массив.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
int main()
{
    int a[] = { 1, 2, 3, 4, 5 };
 
    // ok
    for ( int & i : a ) {
        std::cout << ' ' << i;
    }
    std::cout << std::endl;
 
    // ok
    for ( auto it = std::begin( a ); it != std::end( a ); ++it ) {
        std::cout << ' ' << *it;
    }
    std::cout << std::endl;
}
Yandex
Объявления
15.11.2015, 18:33     Какие преимущества дают итераторы?
Ответ Создать тему
Опции темы

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