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 最接近:
