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

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

Войти
Регистрация
Восстановить пароль
 
Артем Смирнов
6 / 6 / 1
Регистрация: 15.05.2012
Сообщений: 40
#1

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

26.11.2013, 18:09. Просмотров 597. Ответов 13
Метки нет (Все метки)

Всем добрый вечер! Есть небольшие затруднения , вот например фрагмент кода:
C++
1
2
3
4
5
6
7
8
9
10
//...
    multimap<int,Point> divisionP;
    multimap<int,Point>::const_ iterator i;
    Point temp;
    for (i=divisionP.begin();i!=divisionP.end();i++){
        temp=i->second;
        cout<<"Для контура "<<i->first<<" существует точка: "; temp.show(); 
        cout<<endl;
    }
//...
Не могли бы вы подсказать, как мне сделать так, чтобы значение итератора i указывало не на начало multimap, а например на 2, от начала контейнера, значение? Единственное, что пришло на ум инкрементировать дважды итератор, перед циклом, думаю , что это не очень хорошее решение...
Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2013, 18:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Итераторы (C++):

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

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

Итераторы - C++
Не могу въехать как работают итераторы, литература-форумы не помогли, увы. На 26й строке то, что не могу осилить. Прохожу по стеку...

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

Итераторы С++ - C++
Как с помощью итераторов работать с массивом объектов класса? И что такое класс Итератор? П.С. Не через вектора

Итераторы - C++
Добрый день! Начал изучать классы в C++ параллельно с итераторами. Решил сделать простенькую программу, которая создаёт список классов....

13
FAQEnD
43 / 43 / 1
Регистрация: 15.12.2012
Сообщений: 88
26.11.2013, 18:17 #2
C++
1
for (i=divisionP.begin()+1;i!=divisionP.end();i++)
0
Артем Смирнов
6 / 6 / 1
Регистрация: 15.05.2012
Сообщений: 40
26.11.2013, 18:28  [ТС] #3
FAQEnD, Во первых это не компилируется. Если можете сказать почему не компилируется ответьте. Я думал это связано с тем, что с.begin() возвращает двунаправленный итератор, а вами приведенная операция iter+n, возможна вроде только для итераторов произвольного доступа?
0
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
26.11.2013, 18:32 #4
Артем Смирнов, если знаешь значение i-го элемента, то через find. Если нет, то да, инкрементацией.

http://www.cplusplus.com/reference/map/multimap/?kw=multimap

map - это то ли АВЛ, то ли красно-черное дерево, а в нем нет индексов, чтобы можно было так просто к i-ому элементу обратиться. Только через указатель, find (O(log(n))) или последовательная инкрементация итератора.
1
Артем Смирнов
6 / 6 / 1
Регистрация: 15.05.2012
Сообщений: 40
26.11.2013, 18:47  [ТС] #5
Спасибо большое за разъяснения!
0
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
26.11.2013, 18:54 #6
или, возможно, map реализован при помощи ассоциативных массивов. Что всё-равно намекает на то, что прямой индексации нет
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
26.11.2013, 19:28 #7
C++
1
i=divisionP.begin()+2
0
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
26.11.2013, 19:31 #8
castaway, а у них разве бинарный + перегружен?
0
Артем Смирнов
6 / 6 / 1
Регистрация: 15.05.2012
Сообщений: 40
26.11.2013, 19:33  [ТС] #9
castaway, Всегда, сколько не пытался
C++
1
|44|error: no match for 'operator+' in 'divisionP.std::multimap<_Key, _Tp, _Compare, _Alloc>::begin [with _Key = Point, _Tp = int, _Compare = classcomp, _Alloc = std::allocator<std::pair<const Point, int> >]() + 2'|
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
26.11.2013, 20:06 #10
У меня нет под рукой компьютера (я с телефона). Вы в каком стандарте пробуете компилировать?
0
Артем Смирнов
6 / 6 / 1
Регистрация: 15.05.2012
Сообщений: 40
26.11.2013, 20:19  [ТС] #11
castaway, а что в C++11 все работает?, у меня компилятор GCC 4.8.0 , там вроде нет поддержки стандарта C++11
0
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
26.11.2013, 20:20 #12
castaway, в 99 точно нет. Сколько раз пробовал. А вот 11 и 14 не пробовал ни разу.
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
26.11.2013, 20:26 #13
В GCC 4.7.2 есть поддержка C++11
nexen, ты вообще в C++ компилируешь? Что такое 99 ?
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
26.11.2013, 20:40 #14
Цитата Сообщение от castaway Посмотреть сообщение
C++
1
i=divisionP.begin()+2
Это не дожно работать, там же итераторы не с произвольным доступом.
C++
1
i = std::next(divisionP.begin(), 2);
либо
C++
1
2
i = divisionP.begin();
std::advance(i, 2);
Добавлено через 56 секунд
Цитата Сообщение от Артем Смирнов Посмотреть сообщение
у меня компилятор GCC 4.8.0 , там вроде нет поддержки стандарта C++11
-std=c++11, по умолчанию там c++03
2
26.11.2013, 20:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2013, 20:40
Привет! Вот еще темы с ответами:

Итераторы - C++
От какого класса наследуются итераторы в STL? Например я создаю класс и для него нужен собственный итератор, совместимый с STL (более...

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

Итераторы - C++
Как указать не на следующий за последним элемент последовательности, а на последний! end() - следующий за последним Добавлено через...

Итераторы - C++
При удалении элемента из списка (list) - ошибка list iterator not decrementable Что делать? for(Iter = npc.begin(); Iter !=...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

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