Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для NanoBreaker
23 / 23 / 10
Регистрация: 11.07.2013
Сообщений: 94

Работа с Итераторами

21.07.2013, 20:30. Показов 1386. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, у меня возникла следующая проблема.

У меня есть list<pair<int, int> > snake;

Мне надо, чтобы следующий элемент списка принимал значение нынешнего. Может кто-то пожалуйста написать цикл с использованием итераторов. ( Получается что, значение первого элемента списка не изменяется, а все последующие элементы принимают значения элементов перед ними. )
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.07.2013, 20:30
Ответы с готовыми решениями:

Работа с итераторами
QVector &lt;CDevice*&gt; *arrayDevice; Как сделать итератор на такой объект и потом обращаться к функциям CDevice ?

Работа с итераторами
Добрый вечер. Есть класс для работы с документами. Итераторы для него описаны не совсем верно и при использовании функции print()...

Работа с итераторами в Qt
Здравствуйте, уважаемые форумчане. Пожалуйста, помогите с решением одной проблемы. Эта проблема напрямую связана с итераторами. Вначале был...

11
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
21.07.2013, 20:34
Цитата Сообщение от NanoBreaker Посмотреть сообщение
чтобы следующий элемент списка принимал значение нынешнего
Цитата Сообщение от NanoBreaker Посмотреть сообщение
Получается что, значение первого элемента списка не изменяется, а все последующие элементы принимают значения элементов перед ними
Что значит "нынешний" ?
0
 Аватар для NanoBreaker
23 / 23 / 10
Регистрация: 11.07.2013
Сообщений: 94
21.07.2013, 20:37  [ТС]
Это элемент на который в данный момент указывает итератор.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
21.07.2013, 20:39
Итератор - не указатель.
Покажи что пробовал и где возникли проблемы.
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
21.07.2013, 20:49
Не прочитал про "нынешний"
0
 Аватар для NanoBreaker
23 / 23 / 10
Регистрация: 11.07.2013
Сообщений: 94
21.07.2013, 20:54  [ТС]
C++
1
2
3
4
5
for(auto iter = snake_blocks.end(); iter != snake_blocks.begin(); --iter)
{
    iter -> first = --iter -> first;
    iter -> second = --iter -> second;
}
Для примера с массивом цикл выглядел бы так (массив из 5 элементов):
C++
1
2
3
4
5
for(int i = 4; i != 0; i--)
{
    array[i].first = array[i - 1].first;
    array[i].second = array[i - 1].second;
}
Более чем уверен что с итераторами полную фигню написал )
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
21.07.2013, 20:58
NanoBreaker, может так, я не уверен, что понял тебя:
C++
1
2
3
for (auto first(snake_blocks.rbegin()), second(first); ++second != snake_blocks.rend(); ++first) {
   *first = *second;
}
0
 Аватар для NanoBreaker
23 / 23 / 10
Регистрация: 11.07.2013
Сообщений: 94
21.07.2013, 21:07  [ТС]
Ммм, нет
First и Second, это координаты x и y соответственно.
Я использовал pair<int, int>, чтобы лишний раз не составлять структуру.

Просмотри вариант с одномерным массивом и тогда всё станет ясно:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct P
{
    int first;
    int second;
};
. . .
P array[5] = { 0,1,2,3,4,5,6,7,8,9 };
. . .
for(int i = 4; i != 0; i--)
{
    array[i].first = array[i - 1].first;
    array[i].second = array[i - 1].second;
}
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
21.07.2013, 21:14
NanoBreaker, ) большая разница?
C++
1
2
3
4
for (auto first(snake_blocks.rbegin()), second(first); ++second != snake_blocks.rend(); ++first) {
   first->first  = second->first;
   first->second = second->second;
}
Добавлено через 2 минуты
Цитата Сообщение от NanoBreaker Посмотреть сообщение
Я использовал pair<int, int>, чтобы лишний раз не составлять структуру.
И почему бы не использовать std::pair вместо своей структуры? Там хоть оператор присваивания есть...)
1
 Аватар для NanoBreaker
23 / 23 / 10
Регистрация: 11.07.2013
Сообщений: 94
21.07.2013, 21:21  [ТС]
Большое спасибо, теперь работает.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
22.07.2013, 00:35
Цитата Сообщение от NanoBreaker Посмотреть сообщение
Мне надо, чтобы следующий элемент списка принимал значение нынешнего
Если задача заключается в движении змейки на одну клетку, перебирать весь список не требуется.

Глянь сюда. Создание простой консольной "Змейки"
всё движение заключается в
C++
1
2
3
4
5
6
7
8
9
pos=snake.back();
    snake.pop_back();//подвинуть хвост
    put_cell(pos, SPACE);//стереть хвост с экрана, если в нём одна клетка
    pos=snake.front();
    pos.X+=dir.X; 
    pos.Y+=dir.Y;//подвинуть голову
 ///////
    snake.push_front(pos);//добавить змейке двинутую бошку
    put_cell(pos, DOT);//нарисовать эту бошку
и никаких циклов!
1
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
22.07.2013, 01:12
NanoBreaker, вообще циклы не нужны, можно просто список "пересвязать" и обновить значение в начале:
C++
1
2
3
auto const& front = snake_blocks.front();
snake_blocks.splice(std::end(snake_blocks), snake_blocks, std::begin(snake_blocks), std::prev(std::end(snake_blocks)));
snake_blocks.front() = front;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.07.2013, 01:12
Помогаю со студенческими работами здесь

Непонятки с итераторами
Здравствуйте, господа программисты. Пытался написать вот эту задачку, но получается что-то нехорошее. Помогите, пожалуйста! #include...

Ошибка с итераторами
Как пройтись по контейнеру и вызвать функции из класса? main.cpp|15|error: request for member 'Area' in '*...

Запутался с итераторами
Привет. Никак не могу понять почему ошибка? std::string s = &quot;sEReGA&quot;; for (std::string::iterator i = s.begin(); i != s.end();...

Действие с итераторами
Добрый вечер, потихоньку разбираюсь в книге Липпмана &quot;С++ Вводный курс&quot;, и тут вот какая штука. Там приведён следующий пример...

Помогите разобраться с итераторами
У меня есть шаблон класса контейнер. Я использую vector из stl. Так вот мне нужен итератор для поиска find ( first, last, value ) но...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru