【发布时间】:2021-12-20 15:18:40
【问题描述】:
我有一个用例,我需要以无特定顺序存储一些 uint16_t 变量(尽管变量的实际类型不相关)。我决定求助于 STL 来寻找最适合我需要的容器。
容器中的物品可能会被取出使用并放回容器中。有点像机械师可能会有一盒螺丝刀,而不是把螺丝刀放在口袋里。容器不需要对存储的对象进行任何排序,取出什么都没有关系——唯一的要求是知道容器中是否还有任何东西。
我的目光转向std::stack 和std::forward_list。它们都提供了 O(1) 插入(只是改变前面的元素)和 O(1) 的弹出操作(同样,只是改变前面的元素并返回前一个前面)。问题是 - 我不知道它们在概念上有何不同。
我知道std::stack 是一个仅包装实际 STL 容器的适配器(默认为 std::deque),因此它可能会产生一些意外开销,具体取决于被包装的容器。
我倾向于使用std::forward_list,但我正在寻找同事的意见。如果您对此事有任何想法,请分享。
【问题讨论】:
-
几乎总是
std::vector,除非您可以测量差异。从 45:48 观看 channel9.msdn.com/Events/Build/2014/2-661 了解原因。 -
@RichardCritten 容器需要是静态常量。在没有 gnu::constructor 或 #pragma 启动的情况下,我可以在代码中调用 vector.reserve()。
标签: c++ stl stack singly-linked-list forward-list