Home C&C++函数库 c++ 语法 程序源码 Linux C库

std::

forward_list

函数模板   <array>

template < class T, class Alloc = allocator<T> > class forward_list;

前向链表

前向链表是一种序列容器,它允许在序列中的任何位置进行常量时间的插入和擦除操作。

前向链表实现为单链表;单链表可以将所包含的每个元素存储在不同且不相关的存储位置。 顺序是通过与序列中下一个元素的链接中的每个元素的关联来保持的。

forward_list容器和list容器在设计上的主要区别在于前者在内部只保留到下一个元素的链接, 而后者为每个元素保留两个链接:一个指向下一个元素,一个指向前一个元素, 允许两个方向的高效迭代,但每个元素消耗额外的存储空间,插入和删除元素的时间开销稍微高一些。 因此,Forward_list对象比list对象更有效,尽管它们只能向前迭代。

与其他基本标准序列容器(array、vector和deque)相比,forward_list在插入、 提取和移动容器内任意位置的元素方面通常表现得更好, 因此在大量使用这些元素的算法(如排序算法)方面也表现得更好。

与其他序列容器相比,forward_lists和list的主要缺点是它们不能直接根据元素的位置访问元素; 例如,要访问forward_list中的第6个元素,必须从开始迭代到该位置, 这需要在这两个位置之间的距离上花费线性时间。 它们还会消耗一些额外的内存来保持与每个元素关联的链接信息 (对于小型元素的大列表来说,这可能是一个重要因素)。

forward_list类模板的设计是考虑到效率的:在设计上,它和简单的手写c风格单链表一样高效, 事实上,它是唯一一个出于效率考虑而故意没有size成员函数的标准容器:由于它是一个链表, 如果有一个size成员需要常量的时间,那么它就需要为它的大小保留一个内部计数器(就像list那样)。 这将消耗一些额外的存储空间,并使插入和删除操作的效率稍微低一些。 要获得forward_list对象的大小,可以使用distance算法的 begin和end,这是一个需要线性时间的操作。

☲  容器特性


顺序排列
序列容器中的元素按照严格的线性顺序排列。每个元素根据它们在这个序列中的位置来访问。
链表
每个元素保留关于如何定位下一个元素的信息, 允许在特定元素(甚至是整个范围)之后进行常量时间的插入和擦除操作,但没有直接的随机访问。
分配方式
容器使用allocator对象来动态处理其存储需求。

☲  模板参数


T
所包含元素的类型。
别名为成员类型forward::value_type。
Alloc
用于定义存储分配模型的allocator对象的类型。 默认情况下,使用allocator类模板,它定义了最简单的内存分配模型,并且是值独立的。
别名为成员类型forward_list:: alloator_type。

☉  成员类型



成员类型 定义 注释
value_type 起始模板参数(T)
allocator_type 第二个模板参数(Alloc) 默认为: allocator< value_type >
reference value_type& 引用类型
const_reference const value_type& 常引用
pointer allocator_traits<allocator_type>::pointer 对于默认分配器: value_type*
const_pointer allocator_traits<allocator_type>::const_pointer 对于默认分配器: const value_type*
iterator 指向value_type的前向迭代器 可转换到const_iterator
const_iterator 指向const value_type的前向迭代器
difference_type 一种有符号整型,相当于:
iterator_traits<iterator>::difference_type
通常与ptrdiff_t相同
size_type 无符号整型,可以表示任何difference_type的非负值 通常与size_t相同

☞ 成员函数



(constructor) 构建forward_list对象(公众成员函数)
(destructor) forward_list析构函数(公众成员函数)
operator= 等号重载 (公众成员函数)
迭代器:
before_begin 返回指向容器中第一个元素之前位置的迭代器 (公众成员函数)
begin 返回指向forward_list容器第一个元素的迭代器。 (公众成员函数)
end 返回一个指向forward_list容器末尾元素的下一个元素的迭代器 (公众成员函数)
cbefore_begin 返回指向容器中第一个元素之前位置的常量迭代器(公众成员函数)
cbegin 返回指向容器第一个元素的const_iterator对象 (公众成员函数)
cend 返回一个指向容器末尾元素的下一个元素的常量迭代器 (公众成员函数)
容量:
empty 测试容器是否为空 (公众成员函数)
max_size 返回最大元素个数(公众成员函数)
元素访问:
front 访问首元素(公众成员函数)
修改器:
assign 分配容器的内容(公众成员函数)
emplace_front 构造并在开头插入元素(公众成员函数)
push_front 在开头插入元素(公众成员函数)
pop_front 删除第一个元素(公众成员函数)
emplace_after 构造并插入元素(公众成员函数)
insert_after 插入元素(公众成员函数)
erase_after 删除元素(公众成员函数)
swap 交换内容(公众成员函数)
resize 改变大小(公众成员函数)
clear 清除内容(公众成员函数)

☣ 操作



splice_after 从另一个forward_list转移元素(公共成员函数)
remove 删除具有特定值的元素(公共成员函数)
remove_if 移除满足条件的元素(公共成员函数)
unique 删除重复的值(公共成员函数)
merge 合并已排序的容器(公共成员函数)
sort 对容器中的元素进行排序(公共成员函数)
reverse 颠倒元素的顺序(公共成员函数)
空间配置器:
get_allocator 获取空间配置器(公众成员函数)

☣ 非成员函数重载



relational operators (forward_list) forward_list的关系运算符(函数模板)
swap(forward_list) 交换forward_list内容(函数模板)

联系我们 免责声明 关于CandCplus 网站地图