C++ STL 容器 forward_list类型
C++ STL 容器 forward_list类型
介绍
std::forward_list 是 C++ 标准模板库 (STL) 中的一个单向链表容器。与 std::list 不同,std::forward_list 只允许从头部到尾部的单向迭代,不支持反向迭代。因此,std::forward_list 在某些操作上可能比 std::list 更高效,尤其是在插入和删除元素时。
下面是 std::forward_list 的一些主要特点和操作:
特点
单向迭代:
std::forward_list只提供单向迭代器,这意味着你只能从链表的头部开始遍历到尾部。内存效率:
std::forward_list通常比std::list更节省内存,因为它不需要存储每个节点的前驱指针。常数时间插入和删除:在
std::forward_list的头部插入和删除元素是常数时间操作。然而,在链表中间或尾部插入或删除元素需要线性时间,因为需要遍历到相应的位置。不支持随机访问:由于
std::forward_list是链表结构,因此不支持随机访问迭代器。你不能使用下标操作符([])或at()函数来直接访问元素。
操作
std::forward_list 提供了一系列成员函数来操作链表:
begin(): 返回指向链表第一个元素的迭代器。end(): 返回指向链表末尾之后位置的迭代器。empty(): 检查链表是否为空。size(): 返回链表中元素的数量。front(): 返回链表中第一个元素的引用。back(): 返回链表中最后一个元素的引用。push_front(const value_type& value): 在链表头部插入一个元素。pop_front(): 删除链表头部的元素。insert_after(const_iterator position, const value_type& value): 在给定位置之后插入一个元素。erase_after(const_iterator position): 删除给定位置之后的元素。clear(): 清空链表中的所有元素。swap(forward_list& other): 交换两个链表的内容。
forward_list中的特殊迭代器
a.before_begin(); //返回一个指向链表之前的迭代器
a.erase_after(a.before_begin());
// 这个函数删除由pos参数指定的位置之后的元素。
//如果pos是before_begin()返回的迭代器,那么erase_after实际上会删除链表的第一个元素。
代码
using Group = std::forward_list<float>;
// 初始化
Group a;
Group b=a;
Group c(a);
Group d(1.1);
Group e(1.1,2.2);
Group f(e.begin(),e.end());
Group g({1.0f,2.0f,3.0f});
Group h = {1.0f,2.0f};
auto bb = a.before_begin(); //返回一个指向链表之前的迭代器
a.erase_after(a.before_begin());
// 这个函数删除由pos参数指定的位置之后的元素。
//如果pos是before_begin()返回的迭代器,那么erase_after实际上会删除链表的第一个元素。
b.push_front(1.2f); //先构造一个元素,然后插入头部
b.emplace_front(1.3f); //在forward_list头部直接构造一个元素,比push_front更快
auto iter = b.insert_after(b.before_begin(),100.0f); //在链表第一个元素位置插入100f,返回位置迭代器
iter = b.insert_after(b.before_begin(),10,-10.0f);
b.insert_after(b.before_begin(),h.begin(),h.end());
b.remove(1.0f); //删除1.0f
b.remove_if([](auto u){ //自定义删除
return u>100.0f;
});
b.reverse(); //元素位置全部首尾交换
b.sort(); //排序
b.merge(g); //合并两个链表,然后g的元素跟着b的末尾元素位置,g元素清空
b.unique(); //删除掉链表中重复元素
b.splice_after(b.before_begin(),c );
//把c全部元素移动到b的首部,移动过去的时候c元素顺序不变,c内容被清空
C++ STL 容器 forward_list类型的更多相关文章
- STL容器-- forward_list 用法
http://www.cplusplus.com/reference/forward_list/
- c++ STL 常用容器元素类型相关限制 指针 引用
c++ 的 STL 中主要有 vector , list, map, set , multimap,multiset 这些容器完全支持使用内置类型和指针(指针注意内存泄露问题). 就是说乱用智能指针 ...
- STL容器概述
STL容器 1.容器概述 1.1.容器分类 1.1.1.顺序容器:提供对元素序列的访问,顺序容器为元素连续分配内存或将元素组织为链表,元素的类型是容器成员value_type. 顺序容器 说明 vec ...
- STL容器
啦啦啦,今天听啦高年级学长讲的STL容器啦,发现有好多东西还是有必要记载的,毕竟学长是身经百战的,他在参加各种比赛的时候积累的经验可不是一天两天就能学来的,那个可是炒鸡有价值的啊,啊啊啊啊啊 #inc ...
- c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...
- 【转】c++中Vector等STL容器的自定义排序
如果要自己定义STL容器的元素类最好满足STL容器对元素的要求 必须要求: 1.Copy构造函数 2.赋值=操作符 3.能够销毁对象的析构函数 另外: 1. ...
- STL容器的适用情况
转自http://hsw625728.blog.163.com/blog/static/3957072820091116114655254/ ly; mso-default-props:yes; m ...
- STL容器与配接器
STL容器包括顺序容器.关联容器.无序关联容器 STL配接器包括容器配接器.函数配接器 顺序容器: vector 行为类似于数组,但可以根据要求 ...
- STL容器的本质
http://blog.sina.com.cn/s/blog_4d3a41f40100eof0.html 最近在学习unordered_map里面的散列函数和相等函数怎么写.学习过程中看到了一个好帖子 ...
- 不要在公共接口中传递STL容器
最近的一个项目,是开发一个framework,提供给公司内部不同的产品线使用. 之间遇到的一个问题,就是STL容器的使用, 而结论是不要在公共接口中传递STL容器: 这里说的STL容器,但主要则是指容 ...
随机推荐
- vue获取子组件的实例$el、$attrs和inheritAttrs的使用
我的需求 有些时候,我们需要获取组件的DOM元素 有些小伙伴会说,这还不简单 直接使用this.$ref.xx不就可以了吗 我们来看一下,是不是我们想的那样简单 组件内容 <template&g ...
- vue动画appear 实现页面刚展示出来的时候,入场效果
<style> /* 给动画添加一组过度效果 */ .v-enter, .v-leave-to { opacity: 0; transform: translateY(80px); } . ...
- 【JS逆向百例】某音乐网分离式 webpack 非 IIFE 改写实战
关注微信公众号:K哥爬虫,QQ交流群:808574309,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途 ...
- Git、Github、Gitlab与Gitee
Git.Github.Gitlab与Gitee之间的关系 Git 是一种版本控制系统,是一个命令,是一种工具,有点像cmd(命令行工具). Github 是一个基于git实现在线代码托管的仓库,向互联 ...
- Postfix + Extmail 企业邮件服务器搭建
ExtMail套件用于提供从浏览器中登录.使用邮件系统的Web操作界面,而Extman套件用于提供从浏览器中管理邮件系统的Web操作界面.它以GPL版权释出,设计初衷是希望设计一个适应当前高速发展的I ...
- 【链表】链表的合并【经典面试OJ详解】【力扣21,力扣23】超详细的算法教程
链表的合并 导航小助手 说在前面 题目链接 链表结构 OJ21.合并两个有序链表 题目描述和算法分析 接口的完整实现代码 OJ23.合并K个升序链表 题目描述和算法分析 接口的完整实现代码 尾声 说在 ...
- PyTorch下,使用list放置模块,导致计算设备不一的报错
报错 在复现 Transformer 代码的训练阶段时,发生报错: RuntimeError: Expected all tensors to be on the same device, but f ...
- 升腾C92 刷 OpenWrt 作旁路由设置 DNS 服务、扩容分区、设置 swap
最新博客文章链接 文字更新时间:2024/02/04 一直知道 OpenWrt 经常拿来做软路由软件.最近买了个二手小主机升腾 C92 来做旁路由服务器,其被归为瘦客户机一类,感觉和工控机差不多,现价 ...
- 洛谷P2415 集合求和(数学问题,使用集合子集求和公式)
可以知道对于一个有n个数据的集合,其子集个数有2^n个 至于证明可以这样理解,对于n个数据,其子集就是对数据进行组和,而对于每个位置上的数据,组合时仅有两种状态即有此数据或无此数据,也就是有两种可能, ...
- 20.2 显示的链接到导出符号--《Windows核心编程》
FAPPROC GetProcAddress(HMOUDLE hInstDll,PCSTR pszSymbolName); 1.根据名称 FARPROC FunctionAddress = (ULON ...