std::forward_list 是 C++11 引入的单向无哨兵链表,内存更紧凑、头部操作高效,但不支持随机访问、反向迭代和 O(1) size()(C++17 起可选),适用于内存敏感、头部频繁增删且单向遍历的场景。

std::forward_list 是 C++11 引入的标准模板库(STL)容器,它是一个不带尾指针的单向链表,只支持从头到尾的单向遍历,不提供随机访问,也不保存自身大小(size() 在 C++11 中默认是 O(n) 操作,C++17 起可选实现为 O(1),但标准仍不强制)。
相比 std::list(双向链表),forward_list 内存更紧凑:每个节点只存一个指针(指向下一节点),没有 prev 指针,也没有额外的哨兵节点(sentinel node)。这意味着:
int、char*)声明和初始化:
std::forward_list
std::forward_list<:string> names;
fl.push_front(0); // 只能从前端插入
立即学习“C++免费学习笔记(深入)”;
关键限制与对应操作:
push_back() —— 需用 insert_after() 在末尾前插入,或遍历到末尾再插pop_back() —— 删除末尾需先找到倒数第二个节点,再 erase_after()
before 位置:如 insert_after(it, val)、erase_after(it)
forward_list::iterator 只支持 ++,不支持 -- 或 +n因为没有尾指针,手动维护尾迭代器可避免重复遍历:
std::forward_list
auto tail = std::prev(a.end()); // C++11 起可用 prev,但注意 forward_list::end() 不可递减
// 更安全做法:用 before_begin()
a.insert_after(tail, 3); // 插入到末尾
拼接两个 forward_list 推荐用 splice_after():
a.splice_after(pos, b):把 b 的所有元素插入到 a 中 pos 后面,b 变为空适用场景很明确:
不推荐用于:需要 size()、需要 back()、需要稳定下标、或常做尾部操作的场景——此时 vector 或 list 更合适。
以上就是c++++的std::forward_list是什么 单向链表容器的使用【STL详解】的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号