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容器,但主要则是指容 ...
随机推荐
- Go实现网络代理
使用 Go 语言开发网络代理服务可以通过以下步骤完成.这里,我们将使用 golang.org/x/net/proxy 包来创建一个简单的 SOCKS5 代理服务作为示例. 步骤 1. 安装 golan ...
- 4.8 C++ Boost 应用JSON解析库
property_tree 是 Boost 库中的一个头文件库,用于处理和解析基于 XML.Json 或者 INFO 格式的数据. property_tree 可以提供一个轻量级的.灵活的.基于二叉数 ...
- 时间工具类-Java
1.根据传入时间获取该时间所在季度的第一天 /** * 根据传入时间获取传入日期所在季度的第一天的日期 * * @param startDate * @return */ public static ...
- Spring一套全通2—工厂高级
百知教育 - Spring系列课程 - 工厂高级特性 第十章.对象的生命周期 1. 什么是对象的生命周期 指的是一个对象创建.存活.消亡的一个完整过程 2. 为什么要学习对象的生命周期 由Spring ...
- 在K8S中,节点故障驱逐pod过程时间怎么定义?
在Kubernetes中,节点故障驱逐Pod的过程涉及多个参数和组件的相互作用.以下是该过程的简要概述: 默认设置:在默认配置下,节点故障时,工作负载的调度周期约为6分钟. 关键参数: node-mo ...
- 【操作系统和计网从入门到深入】(四)基础IO和文件系统
前言 这个专栏其实是博主在复习操作系统和计算机网络时候的笔记,所以如果是博主比较熟悉的知识点,博主可能就直接跳过了,但是所有重要的知识点,在这个专栏里面都会提到!而且我也一定会保证这个专栏知识点的完整 ...
- 基数排序|RadixSort|C++实现
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量干货博客汇总https://blog. ...
- phpwind论坛,后台老是有缓存 不及时更新,操作无效等问题的解决方法。
- [数据库] 数据库中的DDL、DML、DQL、DCL
SQL 程序语言有四种类型,对数据库的基本操作都属于这四种类,也就是标题上显示的 DDL.DML.DQL.DCL. 1. DDL DDL(Data Definition Language 数据定义语言 ...
- JS Leetcode 263. 丑数 题解分析,来认识有趣的丑数吧
壹 ❀ 引 本题来自LeetCode263. 丑数,难度简单,题目描述如下: 给你一个整数 n ,请你判断 n 是否为 丑数 .如果是,返回 true :否则,返回 false . 丑数 就是只包含质 ...