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

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

Войти
Регистрация
Восстановить пароль
 
VIKT0R
8 / 8 / 2
Регистрация: 15.11.2011
Сообщений: 78
#1

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

08.07.2015, 11:46. Просмотров 342. Ответов 8
Метки нет (Все метки)

Что-то я не пойму, простая вроде задача - переместить элемент внутри спиcка std::list - стандартной функции нету что-ли?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2015, 11:46     Переместить элемент внутри списка std::list
Посмотрите здесь:

Вопросы по std::list C++
Переместить данный элемент в конец двусвязного списка и вывести указатели на первый и последний элементы C++
Переместить элемент в конец списка и вывести указатели на первый и последний элементы C++
C++ Как удалить первый элемент из std::list?
C++ Вопрос по std::list
C++ Получение предыдущего объекта из списка (std::list)
C++ Сортировка std::list
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
640 / 561 / 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
:)
Эксперт С++
4384 / 3227 / 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
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
08.07.2015, 14:00     Переместить элемент внутри списка std::list #6
VIKT0R, лучше не перегружать интерфейс лишними функциями. К тому же, если есть метод для более общего случая.
Max Dark
В поиске работы
 Аватар для Max Dark
1548 / 1401 / 501
Регистрация: 09.10.2013
Сообщений: 3,184
Записей в блоге: 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
Еще ссылки по теме:

Static std::list C++
Реализация std::list, сложность list::size() C++
C++ В непустом динамическом списке последний элемент переместить в начало списка
C++ Как получить указатель на объект класса из списка std::list?
Потокобезопасность std::map::end, std::list::end C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4384 / 3227 / 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
Ответ Создать тему
Опции темы

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