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

Переместить элемент внутри списка std::list - C++

Восстановить пароль Регистрация
 
VIKT0R
8 / 8 / 2
Регистрация: 15.11.2011
Сообщений: 78
08.07.2015, 11:46     Переместить элемент внутри списка std::list #1
Что-то я не пойму, простая вроде задача - переместить элемент внутри спиcка std::list - стандартной функции нету что-ли?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
08.07.2015, 11:47     Переместить элемент внутри списка std::list #2
erase,insert?
VIKT0R
8 / 8 / 2
Регистрация: 15.11.2011
Сообщений: 78
08.07.2015, 12:00  [ТС]     Переместить элемент внутри списка std::list #3
Нет, ну понятно - я могу сделать insert в новую позицию, потом erase старой позиции, но при этом ведь еще нужно проверить, не совпадают ли старая и новая позиции, а то останешься без данных.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
08.07.2015, 12:11     Переместить элемент внутри списка std::list #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
VIKT0R, http://www.cplusplus.com/reference/list/list/splice/
VIKT0R
8 / 8 / 2
Регистрация: 15.11.2011
Сообщений: 78
08.07.2015, 13:10  [ТС]     Переместить элемент внутри списка std::list #5
Tulosba, спасибо, работает. Хотя я ожидал чего-то типа list::move( target_pos, source_pos ) - наверное разработчики поленились сделать.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
08.07.2015, 14:00     Переместить элемент внутри списка std::list #6
VIKT0R, лучше не перегружать интерфейс лишними функциями. К тому же, если есть метод для более общего случая.
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
08.07.2015, 15:50     Переместить элемент внутри списка std::list #7
Хм.. а std::swap тут разве не подойдет?
C++
1
2
3
4
5
auto iter1 = lst.begin();
auto iter2 = ...;
 
//....
std::swap(*iter1, *iter2);
Добавлено через 9 минут
Извиняюсь, понял, что не понял вопроса)
VIKT0R
8 / 8 / 2
Регистрация: 15.11.2011
Сообщений: 78
08.07.2015, 15:59  [ТС]     Переместить элемент внутри списка std::list #8
Cra3y, спасибо, тоже работает, но splice больше подходит по смыслу, т.к. мне не нужно обменивать элементы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2015, 16:11     Переместить элемент внутри списка std::list
Еще ссылки по теме:

C++ Сортировка std::list
Static std::list C++
Реализация std::list, сложность list::size() C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
08.07.2015, 16:11     Переместить элемент внутри списка std::list #9
Cra3y, swap будет вызывать конструктор копирования/перемещения подлежащих объектов, а splice не будет. Ну и смысл всё же разный
Yandex
Объявления
08.07.2015, 16:11     Переместить элемент внутри списка std::list
Ответ Создать тему
Опции темы

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