适配特定场景的连续内存链表类数据结构:名称及STL/Boost实现问询
符合需求的数据结构:名称与常见实现
你描述的这种容器属于**惰性删除(Lazy Deletion)**范畴的变体,结合连续内存存储的特性,常见的称呼有两种:
- 惰性删除连续内存链表:核心是用一块连续内存存储所有节点,通过节点内的标记(或修改索引/指针)标记已删除元素,遍历时跳过标记项,直到容器销毁时统一释放内存。
- 索引式惰性容器:对应你提到的
vector搭配未删除索引的方案,本质是用索引数组过滤出有效元素,同样延迟内存释放。
STL与Boost中的实现情况
- STL标准库:没有直接提供完全匹配的容器,但可以基于
vector快速封装:用一个vector存储你的3-int结构体,再搭配一个vector<bool>作为删除标记,遍历的时候只访问标记为未删除的元素。这种实现简单直接,完全适配你的需求。 - Boost库:有更贴近的现成实现:
- Boost.Intrusive::slist:可以自定义内存分配器,将所有节点预先分配在一块连续内存中,再手动添加删除标记实现惰性删除逻辑,完美契合"初始化一次性填充+正向遍历+惰性删除"的需求。
- Boost.Container::flat_list:本身就是基于连续内存的单向链表(解决
std::list的内存碎片化问题),配合惰性删除标记即可满足你的场景,无需额外处理内存分配。
补充说明
你的两种思路本质都是延迟回收内存+连续内存存储,非常适合存储小型结构体的场景——既避免了std::list频繁分配小内存块的开销,也规避了std::vector删除元素时移动后续元素的性能损耗。
内容的提问来源于stack exchange,提问作者Bubaya
相关产品推荐
相关产品推荐

