Переместить первый элемент в конец списка forward_list - PullRequest
0 голосов
/ 10 декабря 2018

Я знаю, что std :: forward_list - это один связанный список.Мне интересно, как переместить первый элемент (head) в конец списка forward_list.Никаких копий или создания новых узлов!

Я пробовал следующее:

std::forward_list<int> l2 = {10,11,12};
auto beginIt = l2.begin();
beginIt = std::next(beginIt);
l2.splice_after(l2.end(),l2,l2.begin(),beginIt); 

for(int n : l2)
    std::cout << n << ' ';
std::cout << '\n';

Но это не работает.Есть ли способ сделать это?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Для ваших целей, splice_after нужен итератор до последнего элемента.То есть элемент прямо перед end().Дешевого способа получить это не так:

auto pos = l2.begin();
while(std::next(pos) != l2.end()) ++pos;

Тогда splice_after для одного элемента запрашивает итератор, указывающий перед этим элементом.Для первого элемента это before_begin():

l2.splice_after(pos, l2, l2.before_begin()); 
0 голосов
/ 10 декабря 2018

Вы можете использовать rotate :

std::rotate(l.begin(), std::next(l.begin()), l.end());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...