std::forward_list 简介
std::forward_list
为 C++ 11 STL 的 单向 链表:
- 仅记录了首指针,未记录尾指针和链表长度,即无
push_back
和size
方法。 - 相比
std::list
(双向链表,以下简化为list
)- 节约内存空间
- 仅能 顺序访问 ,无法 倒序访问
forward_list::sort
时间复杂度 O(n log n) ,但效率不如list::sort
,尤其链表包含大量元素时。
因 forward_list
与 list
大部分方法相同,这里仅介绍 forward_list
不具备的能力。
顺序插入
因无 forward_list::push_back
方法,顺序插入 forward_list
一组元素得依靠调用者 自行 保存尾指针。
forward_list<int> fl;
auto iter = fl.before_begin();
for (int i = 0; i < 9; ++i) {
iter = fl.insert_after(iter, i);
}
before_begin
返回首元素之前的元素(placeholder)。该元素实际不存在,访问它将导致未定义行为。
顺序复制
back_inserter
返回的std::back_insert_iterator
要求容器实现了push_back
方法。inserter
返回的std::insert_iterator
要求容器实现了insert
方法。
显然,两者皆不适用于 forward_list
,然 inserter
最接近: