std::forward_list

来自cppreference.com
< cpp‎ | container
定义于头文件 <forward_list>
template<

    class T,
    class Allocator = std::allocator<T>

> class forward_list;
(1) (C++11 起)
namespace pmr {

    template <class T>
    using forward_list = std::forward_list<T, std::pmr::polymorphic_allocator<T>>;

}
(2) (C++17 起)

std::forward_list 是支持从容器中的任何位置快速插入和移除元素的容器。不支持快速随机访问。它实现为单链表,且实质上与其在 C 中实现相比无任何开销。与 std::list 相比,此容器提在不需要双向迭代时提供更有效地利用空间的存储。

在链表内或跨数个链表添加、移除和移动元素,不会非法化当前指代链表中其他元素的迭代器。然而,在从链表移除元素(通过 erase_after )时,指代对应元素的迭代器或引用会被非法化。

std::forward_list 满足容器 (Container) (除了 operator== 的复杂度始终为线性和 size 函数)、具分配器容器 (AllocatorAwareContainer) 序列容器 (SequenceContainer) 的要求。

模板形参

T - 元素的类型。
加诸元素的要求依赖于容器上进行的实际操作。泛言之,要求元素类型是完整类型并满足可擦除 (Erasable) 的要求,但许多成员函数附带了更严格的要求。 (C++17 前)
加诸元素的要求依赖于容器上进行的实际操作。泛言之,要求元素类型满足可擦除 (Erasable) 的要求,但许多成员函数附带了更严格的要求。若分配器满足分配器完整性要求,则容器(但非其成员)能以不完整元素类型实例化。 (C++17 起)

Allocator - 用于获取/释放内存及构造/析构内存中元素的分配器。类型必须满足分配器 (Allocator) 的要求。若 Allocator::value_typeT 不同则行为未定义。

成员类型

 
成员类型 定义
value_type T
allocator_type Allocator
size_type 无符号整数类型(通常是 std::size_t
difference_type 有符号整数类型(通常是 std::ptrdiff_t
reference value_type&
const_reference const value_type&
pointer std::allocator_traits<Allocator>::pointer
const_pointer std::allocator_traits<Allocator>::const_pointer
iterator 遗留向前迭代器 (LegacyForwardIterator)
const_iterator 常向前迭代器

成员函数

构造 forward_list
(公开成员函数)
析构 forward_list
(公开成员函数)
赋值给容器
(公开成员函数)
将值赋给容器
(公开成员函数)
返回相关的分配器
(公开成员函数)
元素访问
访问第一个元素
(公开成员函数)
迭代器
返回指向第一个元素之前迭代器
(公开成员函数)
返回指向容器第一个元素的迭代器
(公开成员函数)
返回指向容器尾端的迭代器
(公开成员函数)
容量
检查容器是否为空
(公开成员函数)
返回可容纳的最大元素数
(公开成员函数)
修改器
清除内容
(公开成员函数)
在某个元素后插入新元素
(公开成员函数)
在元素后原位构造元素
(公开成员函数)
擦除元素后的元素
(公开成员函数)
插入元素到容器起始
(公开成员函数)
在容器头部就地构造元素
(公开成员函数)
移除首元素
(公开成员函数)
改变容器中可存储元素的个数
(公开成员函数)
交换内容
(公开成员函数)
操作
合并二个已排序列表
(公开成员函数)
从另一 forward_list 移动元素
(公开成员函数)
移除满足特定标准的元素
(公开成员函数)
将该链表的所有元素的顺序反转
(公开成员函数)
删除连续的重复元素
(公开成员函数)
对元素进行排序
(公开成员函数)

非成员函数

按照字典顺序比较 forward_list 中的值
(函数模板)
特化 std::swap 算法
(函数模板)
擦除所有满足特定判别标准的元素
(函数模板)

推导指引(C++17 起)