Я бы хотел сделать следующее:
- соединить два
std::list
с (l1
и l2
)
- передать объединенный список в функцию
- восстановить два исходных списка
Все это должно происходить без выделения новой памяти.
Сначала я хотел попробовать это с splice()
, но потом я прочитал, что итераторы перемещенных элементов будут аннулированы splice()
.
Затем, однако, я прочитал этот SO-ответ: splice () для std :: list и аннулирование итератора
и решил все равно попробовать:
iterator temp = l2.begin();
l1.splice(l1.end(), l2);
my_function(l1);
l2.splice(l2.end(), l1, temp, l1.end());
Это работает во многих случаях, но если l2
изначально пусто, это не так (потому что temp
не указывает на что-либо значимое).
Конечно, я мог бы проверить l2.size() > 0
, но все это мне кажется слишком обходным.
Кто-нибудь знает лучшее / более чистое решение моей первоначальной проблемы?