Skip to content

std::forward_list

std::forward_list 是单向链表。每个节点只保存一个后继指针,适合需要节点地址稳定、频繁在已知位置后插删且只需单向遍历的场景。

基本操作

cpp
#include <forward_list>

std::forward_list<int> values{2, 3, 4};
values.push_front(1);

auto before = values.before_begin();
values.insert_after(before, 0);
values.erase_after(before);

由于单向链表无法高效找到前驱,接口采用 insert_aftererase_afterbefore_begin() 是首元素之前的特殊迭代器。

为什么没有 size

标准没有要求 forward_list::size(),以保证移动区间和拼接等操作可以维持预期复杂度。需要数量时可用 std::distance 计算 O(n),或在业务层单独维护计数。

splice_after

cpp
std::forward_list<int> source{3, 4};
std::forward_list<int> target{1, 2};
target.splice_after(target.before_begin(), source);

拼接会转移节点而不复制元素,被转移节点的引用和指针仍然有效。迭代器属于的逻辑容器发生变化,应避免继续用旧区间假设操作它们。

选择建议

vector 相比,链表每个元素需要额外指针和独立分配,缓存局部性也更差。除非节点稳定性或 O(1) 拼接是明确需求,否则通常先选择 vector

SIGNAL MAINTAINED · BUILT FROM MARKDOWN