将第一个元素移到forward_list的末尾

时间:2018-12-10 03:29:59

标签: c++ c++11

我知道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';

但是它不起作用。有办法吗?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

您可以使用rotate

std::rotate(l.begin(), std::next(l.begin()), l.end());