我一直在读我c++书中关于STL容器的内容,特别是关于STL及其容器的部分。现在我明白了每一个都有自己特定的属性,我也快记住它们了……但我还不明白的是,它们分别在哪个场景中使用。

怎么解释呢?最好是示例代码。


当前回答

我扩展了Mikael Persson奇妙的流程图。我添加了一些容器类别、数组容器和一些注释。如果你想要自己的副本,这里是谷歌绘图。谢谢你,Mikael做了基础工作! c++容器选择器

其他回答

到目前为止只简单提到的一点是,如果您需要连续的内存(就像C数组提供的那样),那么您只能使用vector、array或字符串。

如果在编译时知道大小,则使用数组。

如果您只需要处理字符类型并且需要字符串,而不仅仅是通用容器,请使用字符串。

在所有其他情况下使用vector (vector应该是大多数情况下容器的默认选择)。

有了这三种方法,您可以使用data()成员函数来获取指向容器第一个元素的指针。

简单的回答是:对所有东西都使用std::vector,除非你有真正的理由不这么做。

当你遇到这样的情况,你会想,“哎呀,std::vector因为X的原因在这里不能很好地工作”,那就以X为基础。

这个备忘单很好地总结了不同的容器。

请参阅底部的流程图,作为在不同使用场景中使用的指南:

由David Moore创建,授权CC by - sa 3.0

我扩展了Mikael Persson奇妙的流程图。我添加了一些容器类别、数组容器和一些注释。如果你想要自己的副本,这里是谷歌绘图。谢谢你,Mikael做了基础工作! c++容器选择器

下面是我创建的David Moore版本(见上文)的流程图,它是最新的(大部分)新标准(c++ 11)。这只是我个人的观点,这并不是无可争议的,但我认为这对我们的讨论很有价值: