c ++中数组的动态大小?

时间:2011-08-11 06:08:49

标签: c++ arrays list vector containers

我很困惑。我不知道应该使用哪些容器。我先告诉你我需要什么。基本上我需要一个可以存储X个Object的容器(并且对象的数量是未知的,它可能是1到50k)。

我读了很多,在这里array vs list它说:如果对象的数量未知(我不知道如何在C ++中调整数组大小),数组需要调整大小,并且它还声明如果使用链表,如果要搜索某个项,它将从第一个到第二个循环(迭代)(反之亦然),而数组可以指定“索引处的数组对象”。

然后我去了另一个解决方案,地图,矢量等。像这样:array vs vector。一些响应者说从不使用数组。

我是C ++的新手,我之前只使用过数组,向量,列表和地图。现在,就我的情况而言,你建议我使用什么样的容器?让我重新说一下我的要求:

  • 需要成为容器
  • 存储的对象数量未知但很大(可能是1 - 40k)
  • 我需要遍历容器才能找到特定的对象

5 个答案:

答案 0 :(得分:6)

std::vector 是您需要的。
选择stl容器时,您必须考虑两件事。

  1. 您要存储的数据
  2. 您要对存储的数据执行的操作
  3. 这里有一个关于SO的问题的图表很好,这样就省去了,我找不到它的链接,但我很久以前就把它保存了,这里是: STL container selection flow chart

答案 1 :(得分:1)

您无法在C ++中调整数组大小,也不确定从哪里获取该数组。你需要的容器是std :: vector。

答案 2 :(得分:1)

一般规则是:使用std::vector直到它不起作用,然后转移到那样做的东西。关于哪个更好,取决于操作,有各种各样的理论规则,但我经常发现std::vector优于其他操作,即使最频繁的操作是std::vector所谓的事情更差。地方似乎比现代机器上的大多数理论考虑更重要。

您可能从std::vector转移的原因之一是因为迭代器有效性。插入std::vector可能会使迭代器无效;插入std::list从不。

答案 3 :(得分:0)

您是否需要遍历容器,或者您的对象有密钥或ID?

如果您有密钥或ID - 您可以使用map通过它快速访问对象,如果id是简单索引,那么您可以使用vector

否则你可以遍历任何容器(它们都有迭代器),但如果你想要提高内存效率,list将是最好的,如果你想要以性能为导向,vector

答案 4 :(得分:0)

您可以使用vector。但是,如果您需要在容器中查找对象,请考虑使用setmultisetmap