我很困惑。我不知道应该使用哪些容器。我先告诉你我需要什么。基本上我需要一个可以存储X个Object的容器(并且对象的数量是未知的,它可能是1到50k)。
我读了很多,在这里array vs list它说:如果对象的数量未知(我不知道如何在C ++中调整数组大小),数组需要调整大小,并且它还声明如果使用链表,如果要搜索某个项,它将从第一个到第二个循环(迭代)(反之亦然),而数组可以指定“索引处的数组对象”。
然后我去了另一个解决方案,地图,矢量等。像这样:array vs vector。一些响应者说从不使用数组。
我是C ++的新手,我之前只使用过数组,向量,列表和地图。现在,就我的情况而言,你建议我使用什么样的容器?让我重新说一下我的要求:
答案 0 :(得分:6)
std::vector 是您需要的。
选择stl容器时,您必须考虑两件事。
这里有一个关于SO的问题的图表很好,这样就省去了,我找不到它的链接,但我很久以前就把它保存了,这里是:
答案 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)