首页 > 解决方案 > 将第一个元素移动到 forward_list 的末尾

问题描述

我知道 std::forward_list 是一个单链表。我想知道如何将第一个元素(头)移动到 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';

但它不起作用。有没有办法做到这一点?

标签: c++c++11

解决方案


出于您的目的,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()); 

推荐阅读