我知道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';
但是它不起作用。有办法吗?
答案 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());