Похоже, цель метода splice
:
Эффекты: Перемещает все элементы списка x в этот список до элемента, на который он указывает. Деструкторы или конструкторы копирования не вызываются.
two.splice(two.end(), one, one.begin());
Полностью рабочая демоверсия:
#include <iostream>
#include <string>
#include <boost/intrusive/slist.hpp>
struct Node : public boost::intrusive::slist_base_hook<>
{
int i;
std::string s;
Node(int i, std::string s) : i(i), s(std::move(s)) {}
};
using NodeList = boost::intrusive::slist<Node, boost::intrusive::cache_last<true>>;
int main()
{
NodeList one;
NodeList two;
auto show = [&](auto text){
std::cout <<text <<"\n one\n";
for (auto & item : one) { std::cout <<" " <<item.i <<' ' <<item.s <<'\n'; }
std::cout <<" two\n";
for (auto & item : two) { std::cout <<" " <<item.i <<' ' <<item.s <<'\n'; }
};
one.push_back(*new Node(42, "hello"));
show("before splice");
two.splice(two.end(), one, one.begin());
show("after splice");
one.clear_and_dispose([](Node * ptr){ delete ptr; });
two.clear_and_dispose([](Node * ptr){ delete ptr; });
return 0;
}
При запуске напишет:
before splice
one
42 hello
two
after splice
one
two
42 hello