STL库之单链表:forward_list
class template
forward_list
<forward_list>
template < class T, class Alloc = allocator<T> > class forward_list;
Forward list
前向链表(单链表)是序列容器,使固定时间插入和擦除操作序列内的任何地方。
前向链表的实现方式和单链表相同;单链表可以存储所包含的每个元素在不同的和无关的存储位置。
在序列中顺序保存每个元素指向下一个元素的关联。
forward_list容器与list容器的主要设计区别是list保持内部唯一的一个链接到下一个元素,而后者则保持每个元素的两个链接:一个指向下一个元素和一个前一个。(即通俗意义上的双端链表)允许高效在两个方向迭代,但每个元素的消耗额外的存储空间,并轻微较高的时间开销插入和删除元素的迭代。forward_list对象,从而比list对象更有效率,虽然他们只能向前遍历。
与其他的基本标准序列容器(array,vector和deque)相比,forward_list一般在容器内的任何位置中的元素的插入、提取和移动操作效率更高,因此在算法中较密集的使用这些操作,例如排序算法。
相比其他序列容器,forward_list的主要缺点是缺乏直接访问他们的位置的元素,例如,要进入第六个元素在forward_list的一个遍历从一开始就到那个位置,这需要线性时间之间的距离。他们也消耗了一些额外的内存保持连接信息相关联的每个元素(这可能是一个小型的元素的大链表的重要因素)。
考虑到forward_list类模板设计的性能:根据设计,它是作为一个简单的手写C风格的单链表一样高效,实际上是仅有的一个标准容器故意缺乏其大小的成员函数是出于效率的考虑。由于其作为一个链表的性质,有一个大小成员在固定的时间,需要保持一个内部的计数器保存其大小(和链表一样)。这会消耗一些额外的存储和使插入和删除操作,效率较低。为了获得一个forward_list对象的大小,可以用其开始和结束,这是一个线性时间的操作距离算法。
容器属性
序列
在一个严格的线性序列中序列容器的元素是有序的。个别元素的访问是通过他们在这个序列中的位置。
链表
每个元素保持如何找到下一个元素的信息,允许常量时间在特定元素(甚至整个范围)后进行插入和擦除操作,但没有直接随机存取。
分配器的获取
容器使用一个分配器对象动态地处理其存储需求。
模板参数
T
元素的类型。
作为成员类型forward_list:: value_type的别名。
Alloc
用来定义存储分配模型的分配器对象的类型。默认情况下使用了分配器类模板,它定义了最简单的内存分配模式和单独存在。
别名成员类型forward_list的::allocator_type的。
在参考的forward_list成员函数,这些相同的名称被假定为模板参数。
成员类型
|
成员类型 |
定义 |
备注 |
|
value_type |
The first template parameter (T) |
|
|
allocator_type |
The second template parameter (Alloc) |
defaults to: allocator<value_type> |
|
reference |
value_type& |
|
|
const_reference |
const value_type& |
|
|
pointer |
allocator_traits<allocator_type>::pointer |
for the default allocator: value_type* |
|
const_pointer |
allocator_traits<allocator_type>::const_pointer |
for the default allocator: const value_type* |
|
iterator |
a forward iterator to value_type |
convertible to const_iterator |
|
const_iterator |
a forward iterator to const value_type |
|
|
size_type |
an unsigned integral type |
usually the same as size_t |
|
difference_type |
a signed integral type |
usually the same as ptrdiff_t |
成员函数
构造函数
构造函数 forward_list (公有成员函数 )
析构函数
析构函数 forward_list (公有成员函数 )
=操作运算符
分配内容 (公有成员函数)
迭代器
before_begin
返回指向开始之前的迭代器指针 (公有成员函数 )
begin
返回指向开始的迭代器指针 (公有成员类型 )
end
返回指向结束的迭代器指针 (公有成员函数 )
cbefore_begin
返回指向开始之前的常迭代器指针 (公有成员函数 )
cbegin
返回指向指向开始的常迭代器指针 (公有成员函数 )
cend
返回指向结束的常迭代器指针 (公有成员函数 )
容量
empty
判断是否为空 (公有成员函数 )
max_size
返回容量的最大值 (公有成员函数 )
元素的获取
front
获得第一个元素值 (公有成员函数 )
修饰符
assign
分配内容 (公有成员函数 )
emplace_front
构造并插入元素到首位置 (公有成员函数 )
push_front
插入元素到首位置 (公有成员函数 )
pop_front
删除首位置的元素 (公有成员函数 )
emplace_after
构造并插入元素 (公有成员函数 )
insert_after
插入元素 (公有成员函数 )
erase_after
擦除元素 (公有成员函数 )
swap
交换内容 (公有成员函数 )
resize
改变容量大小 (公有成员函数 )
clear
清除内容 (公有成员函数 )
操作
splice_after
移动元素从另一个前向链表 (公有成员函数 )
remove
删除特定值的元素 (公有成员函数 )
remove_if
删除符合条件的元素 (公有成员模板函数 )
unique
删除重复值 (成员函数 )
merge
合并排序链表 (公有成员函数 )
sort
容器中的元素排序 (公有成员函数 )
reverse
反转元素的顺序 (公有成员函数 )
观察者
get_allocator
获取分配器 (公有成员函数 )
全局函数
operators (forward_list)
链表的全局关系运算函数 (函数模板 )
swap (forward_list)
交换两个前向链表的内容(函数模板 )
STL库之单链表:forward_list的更多相关文章
- 数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- [转] C++的STL库,vector sort排序时间复杂度 及常见容器比较
http://www.169it.com/article/3215620760.html http://www.cnblogs.com/sharpfeng/archive/2012/09/18/269 ...
- 数组、单链表和双链表介绍 以及 双向链表的C/C++/Java实现
概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的实现. ...
- STL库list::sort()实现深度解析
原创,转载请注明出处:STL库list::sort()实现深度解析 list模板的定义以及一些基本成员函数的实现这里我就不赘述了,还不清楚的同学可以到网上查找相关资料或者直接查看侯捷翻译的<ST ...
- Python线性表——单链表
1. 线性表简介 线性表是一种线性结构,它是由零个或多个数据元素构成的有限序列.线性表的特征是在一个序列中,除了头尾元素,每个元素都有且只有一个直接前驱,有且只有一个直接后继,而序列头元素没有直接前驱 ...
- 大学实验3指导:利用单链表实现A-B
实验目的:深入理解单链表的建立及操作 实验内容: 1.建立单链表A与B 2.实现主要的函数,查找.插入.删除等 3.实现操作A-B 步骤1:包含必要的函数库,对结构体LNode中的抽象数据类型Elem ...
- 模拟实现STL库
最近在复习STL,感觉再看的时候比刚开始学的时候通透很多.以前模拟实现了一个STL库,最近复习完又重构了一遍.代码放出来以供后面学习.如果有写的不好的地方欢迎大家批评指正. STL_List.h #p ...
- 数据结构实验2:C++实现单链表类
太简单了,直接贴题目然后上代码. 题目: 实验2 2.1 实验目的 熟练掌握线性表的链式存储结构. 熟练掌握单链表的有关算法设计. 根据具体问题的需要,设计出合理的表示数据的链式存储结构,并设计相关算 ...
- 【C++】通用单链表
在C++的学习中,採用模板类,而採用虚函数实现多态性.达到通用的目的.结点类数据域被改造为指针,而把数据放在一个抽象类中.由指针与之建立联系. 採用虚函数实现多态性,达到通用的目的.堆内存的分配与释放 ...
随机推荐
- hdu5601-N*M bulbs(黑白棋盘染色)
一个矩形,一个人从左上角走到右下角,每走过一个位置把0变成1,1变成0. 求有没有可能他离开之后所有的数都是0 假设这个矩形是一个棋盘,黑白相间. 这样会发现从一个颜色走到相同颜色可以对棋盘不产生任何 ...
- 图的强连通&双连通
http://www.cnblogs.com/wenruo/p/4989425.html 强连通 强连通是指一个有向图中任意两点v1.v2间存在v1到v2的路径及v2到v1的路径. dfs遍历一个图, ...
- nginx + lua 构建网站防护waf(一)
最近在帮朋友维护一个站点.这个站点是一个Php网站.坑爹的是用IIS做代理.出了无数问题之后忍无可忍,于是要我帮他切换到nginx上面,前期被不断的扫描和CC.最后找到了waf这样一个解决方案缓解一下 ...
- 编写Word宏使选中的图片改变为固定宽度并保持纵横比
代码如下: Sub 改变图片宽度为12并设置灰色边框() ' ' 改变图片宽度为12并设置灰色边框 宏 ' ' ' Application.Run MacroName:="改变图片大 ...
- C#- 压缩和解压缩的研究 .
用了第二种方法,感觉很不错,其他都没用过了.摘录下来,做一个备忘. 最近在网上查了一下在.net中进行压缩和解压缩的方法,方法有很多,我找到了以下几种: 1.利用.net自带的压缩和解压缩方法GZip ...
- [转载](iPhone开发)Bundle Display Name 改为中文。ap
原文地址:(iPhone开发)Bundle Display Name 改为中文.app显示为中文作者:小新 要先在info的Localizations加入Chinese(zh-Hant) 再進到inf ...
- 利用Splatting提交参数(Hash,哈希)
$infos = @{} $infos.Path = 'c:\Windows' $infos.Recurse = $true $infos.Filter = '*.log' $infos.ErrorA ...
- MongoDB的地埋空间数据存储、空间索引以及空间查询
一.关于MongoDB 在众多NoSQL数据库,MongoDB是一个优秀的产品.其官方介绍如下: MongoDB (from "humongous") is a scalable, ...
- [AngularJS + Webpack] Using Webpack for angularjs
1. Install webpack & angular: npm install webpack angular 2. Create webpack.config.js file: modu ...
- mysql my.ini 详解
linux下mysql配置文件my.cnf详解[转] basedir = path 使用给定目录作为根目录(安装目录). character-sets-dir = path 给出存放着字符集的目录 ...