`Std :: list :: splice (std :: const_iterator pos, std :: list && other)` гарантированно оставит `other` пустым? - PullRequest
1 голос
/ 11 февраля 2020

std::list::splice(std::const_iterator pos, std::list&& other) гарантированно оставит other пустым?

Ответы [ 2 ]

4 голосов
/ 11 февраля 2020

Да, это гарантировано для std::list::splice.

(выделено мной)

1) Переводит все элементы из других в *this. Элементы вставляются перед элементом, на который указывает pos. Контейнер other становится пустым после операции . Поведение не определено, если другое относится к тому же объекту, что и *this.

Из стандарта [list.ops] / 4 :

( выделение мое)

Эффекты: вставляет содержимое x до position и x становится пустым . Указатели и ссылки на перемещенные элементы x теперь ссылаются на те же элементы, но как элементы *this. Итераторы, ссылающиеся на перемещенные элементы, будут продолжать ссылаться на свои элементы, но теперь они ведут себя как итераторы в *this, а не в x.

0 голосов
/ 11 февраля 2020

Будет ли пункт назначения начинаться как пустой список? Тогда вы можете поменять списки.

В противном случае, если вы не уверены, вы можете переместить список источников в список адресатов и очистить список источников.

...