STL::forward_list之前向链表

来源:互联网 发布:云计算工程师 编辑:程序博客网 时间:2024/06/06 13:18

本文是Devour Heavens撰写整理的关于C++标准库的知识,所有资料均来自于C++官方文档,欢迎转载。但是为了尊重原作者的劳动,请注明出处!谢谢!

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对象更有效率虽然他们只能向前遍历

其他的基本标准序列容器(arrayvector和deque)相比forward_list一般容器内的任何位置元素插入、提取和移动操作效率更高因此在算法中较密集的使用这些操作,例如排序算法。

相比其他序列容器,forward_lists主要缺点缺乏直接访问他们的位置的元素例如,要进入第六个元素forward_list一个遍历从一开始就到那个位置,这需要线性时间之间距离他们消耗了一些额外的内存保持连接信息相关联的每个元素这可能是一个小型元素大链表重要因素

考虑到forward_list类模板设计的性能:根据设计,它是作为一个简单手写C风格的单链表一样高效实际上是仅有的一个标准容器故意缺乏其大小的成员函数是出于效率的考虑。由于作为一个链表性质有一个大小成员在固定的时间需要保持一个内部的计数器保存其大小(和链表一样会消耗一些额外的存储使插入和删除操作效率较低为了获得一个forward_list对象大小,可以开始和结束,这是一个线性时间操作距离算法

容器属性

序列

    在一个严格线性序列序列容器元素是有序的个别元素的访问是通过他们这个序列位置

链表

   每个元素保持如何找到下一个元素信息允许常量时间在特定元素(甚至整个范围后进行插入和擦除操作,但没有直接随机存取  

分配器的获取

   容器使用一个分配器对象动态地处理存储需求。

模板参数

T

   元素的类型
    作为成员类型forward_list:: value_type的别名

Alloc

   用来定义存储分配模型分配器对象类型默认情况下使用了分配器类模板它定义了最简单内存分配模式和单独存在
   

   别名成员类型forward_list::allocator_type

 

参考forward_list成员函数这些相同的名称被假定模板参数

成员类型   

成员类型定义备注value_typeThe first template parameter (Tallocator_typeThe second template parameter (Alloc)defaults to: allocator<value_type>referencevalue_type& const_referenceconst value_type& pointerallocator_traits<allocator_type>::pointerfor the default allocator: value_type*const_pointerallocator_traits<allocator_type>::const_pointerfor the default allocator: const value_type*iteratora forward iterator to value_typeconvertible to const_iteratorconst_iteratora forward iterator to const value_type size_typean unsigned integral typeusually the same as size_tdifference_typea signed integral typeusually the same as ptrdiff_t

 成员函数

迭代器

容量

元素的获取

修饰符

操作

观察者

全局函数