我一直在读我c++书中关于STL容器的内容,特别是关于STL及其容器的部分。现在我明白了每一个都有自己特定的属性,我也快记住它们了……但我还不明白的是,它们分别在哪个场景中使用。
怎么解释呢?最好是示例代码。
我一直在读我c++书中关于STL容器的内容,特别是关于STL及其容器的部分。现在我明白了每一个都有自己特定的属性,我也快记住它们了……但我还不明白的是,它们分别在哪个场景中使用。
怎么解释呢?最好是示例代码。
当前回答
我重新设计了流程图,有3个属性:
我认为STL容器主要分为两个类。基本容器和利用基本容器实现策略的容器。 首先,流程图应该将决策过程划分为我们应该决定的主要情况,然后详细说明每种情况。 一些扩展容器可以选择不同的基本容器作为它们的内部容器。流程图应考虑每个基本容器可以使用的情况。
流程图:
更多信息在此链接提供。
其他回答
我扩展了Mikael Persson奇妙的流程图。我添加了一些容器类别、数组容器和一些注释。如果你想要自己的副本,这里是谷歌绘图。谢谢你,Mikael做了基础工作! c++容器选择器
这个备忘单很好地总结了不同的容器。
请参阅底部的流程图,作为在不同使用场景中使用的指南:
由David Moore创建,授权CC by - sa 3.0
我重新设计了流程图,有3个属性:
我认为STL容器主要分为两个类。基本容器和利用基本容器实现策略的容器。 首先,流程图应该将决策过程划分为我们应该决定的主要情况,然后详细说明每种情况。 一些扩展容器可以选择不同的基本容器作为它们的内部容器。流程图应考虑每个基本容器可以使用的情况。
流程图:
更多信息在此链接提供。
这完全取决于你想存储什么以及你想用容器做什么。下面是一些我最常用的容器类的例子(非常不详尽):
vector:紧凑的布局,每个包含的对象几乎没有内存开销。有效的迭代。追加、插入和擦除操作的开销可能很大,特别是对于复杂的对象。通过索引查找包含的对象,例如myVector[10]。如果你有很多简单的对象(例如int),可以使用你在c语言中使用数组的地方。在向容器中添加大量对象之前,不要忘记使用reserve()。
list:每个包含对象的内存开销很小。有效的迭代。追加、插入和擦除操作都很便宜。在C中使用链表的地方使用。
set(和multiset):每个包含对象的巨大内存开销。在需要快速查找容器是否包含给定对象的地方使用,或者有效地合并容器。
map(和multimap):每个包含对象的内存开销很大。使用您想要存储键-值对和快速按键查找值的位置。
zdan建议的备忘单上的流程图提供了更详尽的指南。
下面是我创建的David Moore版本(见上文)的流程图,它是最新的(大部分)新标准(c++ 11)。这只是我个人的观点,这并不是无可争议的,但我认为这对我们的讨论很有价值: