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

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

Войти
Регистрация
Восстановить пароль
 
Knjagskij
-4 / 6 / 0
Регистрация: 10.11.2008
Сообщений: 774
Завершенные тесты: 1
#1

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

10.11.2015, 16:16. Просмотров 252. Ответов 7
Метки нет (Все метки)

Доброго времени суток!
Подскажите пожалуйста, какие преимущества дают итераторы по сравнению с обычным обращением к элементу массива?
Можете привести пример, если не сложно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2015, 16:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Какие преимущества дают итераторы? (C++):

какие преимущества дает интерфейсное программирование? - C++
Дорогие программисты, во первых, хочу поздравить вас с Наступающим новым Годом! Я к вам обращаюсь с маленькой просьбой. Я никак не могу...

Компиляторы. Какие преимущества между "кнопкой" и консолью? - C++
В наличии два компилятора: от vs и intel с оболочками и консоли. Какие преимущества между "кнопкой" и консолью?

Итераторы и обратные итераторы - C++
У вектора есть два типа итераторов, обычные и обратные итераторы произвольного доступа... Обычные реализовал, осталось обратные. Решил...

Найти все пятизначные числа, которые при делении на A дают в остатке B, а при делении на C дают в остатке D - C++
C++ Напишите программу, которая вводит четыре натуральных числа (a, b, c и d) и находит все пятизначные числа, которые при делении на a...

Определить, какие из этих имен встречаются во всех классах, какие есть хотя бы в двух классах, и какие - только в одном классе - C++
Для каждого из четырех классов указаны имена девочек, обучающихся в них. Определить, какие из этих имен встречаются во всех классах, какие...

Найти числа, которые при делении на 47 дают в остатке 43, а при делении на 43 дают в остатке 47 - C++
Мне нужно написать программу в Dev-C++ для поиска трехзначных чисел, которые при делении на 47 дают в остатке 43, а при делении на 43 дают...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
pproger
164 / 67 / 13
Регистрация: 22.03.2011
Сообщений: 196
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
164 / 67 / 13
Регистрация: 22.03.2011
Сообщений: 196
10.11.2015, 17:28 #4
Andreas_Kara, да, чота я совсем эти ваши кресты забыл. ну вот как раз пример, почему он не перегружен)
Knjagskij
-4 / 6 / 0
Регистрация: 10.11.2008
Сообщений: 774
Завершенные тесты: 1
15.11.2015, 13:54  [ТС] #5
Т.е.основная проблема в скорости обращения? А может быть такая ситуация, когда итератор менее эффективен, чем обращение по номеру
rikimaru2013
C++ Game Dev
2429 / 1123 / 240
Регистрация: 30.11.2013
Сообщений: 3,673
15.11.2015, 14:02 #6
Итератор это указатель на элеммент контейнера, в данном контексте вопроса.

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

+ Адресс найденого Nod'a можно сохранить и избежать повторного поиска его в дальнейшем (в частных случаях, когда в пределах одного алгоритма не меняется содержимое контейнера и/или поиск элеммента в контейне процесс дорогостоящий).
+ Итератор сразу даст адресс, когда обращение через индекс(для контейнеров где это возможно) начнёт адрессную арифметику (старт + смещение)
- итератор это доп. переменная
- значение итератора не валидно после ряда операций с контейнером(какие почитайте в описании методов)
Убежденный
Системный программист
Эксперт С++
15511 / 7009 / 1108
Регистрация: 02.05.2013
Сообщений: 11,441
Завершенные тесты: 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. Или еще что-нибудь.
Код цикла при этом останется неизменным.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2015, 18:33
Привет! Вот еще темы с ответами:

Итераторы в C++ - C++
Помогите плз решить 2 задачи Задача 1 Напишите программу, использующую итераторы при чтении последовательности строк со стандартного...

итераторы си++ - C++
подскажите пожалуйста какие существуют методы итераторов? и что они делают?

итераторы - C++
ребят помогите плиз vector&lt;double&gt;::iterator t = matrix.begin(); vector&lt;double&gt;::iterator t1 = matrix.end(); for(;t&lt;t1;t++) ...

Итераторы С++ - C++
Помогите, пожалуйста, надо написать две программы Задача 1 Напишите программу, использующую итераторы при чтении последовательности...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.11.2015, 18:33
Ответ Создать тему
Опции темы

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