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

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

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

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

26.11.2013, 18:09. Просмотров 579. Ответов 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, от начала контейнера, значение? Единственное, что пришло на ум инкрементировать дважды итератор, перед циклом, думаю , что это не очень хорошее решение...
Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2013, 18:09     Итераторы
Посмотрите здесь:

итераторы вектора - C++
#include &lt;tchar.h&gt; #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; int _tmain(int argc, _TCHAR* argv) { vector...

векторы и итераторы - C++
void delete_duplicate_neiron(vector&lt;vector &lt;SNeiron&gt; ::iterator &gt;nw) // контейнер имеет 8 значений { for (unsigned int i = 0; i &lt;...

Классы, итераторы - C++
Задание: Класс &quot;Зачетка&quot; в котором есть массив объекта класса экзамен. Вывести данные по результату сдачи экзаменов для работы с объектами...

итераторы в list - C++
привет, подскажите как реализовать поиск c двумя циклами в списке: for (list &lt;Mc*&gt;::iterator i = myList.begin (); i != myList . end () -...

Поточные итераторы - C++
Доброго всем времени суток. У Б. Страуструпа в книге, там где &quot;Итераторы потоков &quot; есть пример, в котором реализуется программа, которая...

Вектор и итераторы - C++
Всем привет. Помогите дописать курсовую. Нодо сделать вывод студентов с вектора + сортировку объектов в векторе по любому значению. Вот что...

Итераторы и структура c++ - C++
Будьте любезны не говорите о том, что использовать структуры в с++ - моветон, подскажите пожалуйста как быть в следующей ситуации: Есть...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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++)
Артем Смирнов
6 / 6 / 1
Регистрация: 15.05.2012
Сообщений: 40
26.11.2013, 18:28  [ТС]     Итераторы #3
FAQEnD, Во первых это не компилируется. Если можете сказать почему не компилируется ответьте. Я думал это связано с тем, что с.begin() возвращает двунаправленный итератор, а вами приведенная операция iter+n, возможна вроде только для итераторов произвольного доступа?
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
26.11.2013, 18:32     Итераторы #4
Артем Смирнов, если знаешь значение i-го элемента, то через find. Если нет, то да, инкрементацией.

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

map - это то ли АВЛ, то ли красно-черное дерево, а в нем нет индексов, чтобы можно было так просто к i-ому элементу обратиться. Только через указатель, find (O(log(n))) или последовательная инкрементация итератора.
Артем Смирнов
6 / 6 / 1
Регистрация: 15.05.2012
Сообщений: 40
26.11.2013, 18:47  [ТС]     Итераторы #5
Спасибо большое за разъяснения!
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
26.11.2013, 18:54     Итераторы #6
или, возможно, map реализован при помощи ассоциативных массивов. Что всё-равно намекает на то, что прямой индексации нет
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
26.11.2013, 19:28     Итераторы #7
C++
1
i=divisionP.begin()+2
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
26.11.2013, 19:31     Итераторы #8
castaway, а у них разве бинарный + перегружен?
Артем Смирнов
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'|
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
26.11.2013, 20:06     Итераторы #10
У меня нет под рукой компьютера (я с телефона). Вы в каком стандарте пробуете компилировать?
Артем Смирнов
6 / 6 / 1
Регистрация: 15.05.2012
Сообщений: 40
26.11.2013, 20:19  [ТС]     Итераторы #11
castaway, а что в C++11 все работает?, у меня компилятор GCC 4.8.0 , там вроде нет поддержки стандарта C++11
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
26.11.2013, 20:20     Итераторы #12
castaway, в 99 точно нет. Сколько раз пробовал. А вот 11 и 14 не пробовал ни разу.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
26.11.2013, 20:26     Итераторы #13
В GCC 4.7.2 есть поддержка C++11
nexen, ты вообще в C++ компилируешь? Что такое 99 ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2013, 20:40     Итераторы
Еще ссылки по теме:

Сортировка и итераторы - C++
Помогите пожалуйста разобраться в функции &quot;sortByMarksCoeff&quot;. Реализации ее действий. Еще не имел дело с итераторами и библиотекой...

Контейнеры и итераторы - C++
Здравствуйте. Нужна помощь в написании лабораторной работы задание 1. Контейнеры. Создать контейнер, добавить в него следующий обьект:...

Контейнеры и итераторы - C++
Тема: иерархия объектов и группа. Итераторы. Задание: Имена всех монархов на заданном континенте.

Итераторы и стеки - C++
Вот условие: Задано целое число. Записать все десятичные цифры этого числа в стек. Переписать элементы в новый стек удалив все цифры...

Потоковые итераторы - C++
Я новичок, прошел тему &quot;STL&quot; по учебнику Лафоре. Пишу в Code::Blocks, поставить другую IDE возможности мало. При попытке работы с...


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

Или воспользуйтесь поиском по форуму:
gray_fox
What a waste!
1446 / 1175 / 61
Регистрация: 21.04.2012
Сообщений: 2,463
Завершенные тесты: 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
Yandex
Объявления
26.11.2013, 20:40     Итераторы
Ответ Создать тему
Опции темы

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