c++ - 将第一个元素移动到 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';
但它不起作用。有没有办法做到这一点?
解决方案
出于您的目的,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());
推荐阅读
- python - 子进程的 Python 替代方法
- android - Android Studio 可以很好地构建应用程序,但它在模拟器/设备上崩溃
- c++ - 如何将函数集合传递给客户端类以将它们用作客户端类本身的成员?
- python - 使用 x 轴格式绘制区域图
- java - Java 中的异步文件 NIO 有什么好处?
- excel - Excel 数据透视表列出重复条目(不计算它们)
- html - Angular 8,Typescript - 单击按钮以显示那些无效/必填字段后如何获取表单中所有无效元素的列表
- python - Python:char的位置= word[i]
- c - 何时使用指针参数检查函数内部的 nullptr?
- asp.net-core - Identity Server 4 登录现有数据库