std :: vector vs std :: list表示插入频率和动态大小

时间:2014-03-30 21:53:19

标签: c++ list c++11 vector shared-memory

考虑我将随机数量的项目添加到容器中的情况,即无法预测容器的大小,插入的频率高,插入的频率应该是容器,除了我想删除一个几乎恒定时间的元素。

注意:我还想在共享内存中使用列表或向量。

所以在这种情况下,最好使用std :: vector或std :: list?

1 个答案:

答案 0 :(得分:5)

通过评论中的澄清,答案是std::vector。这并不奇怪,因为std::list很少是工作的最佳容器。

向末尾添加元素是分摊常量时间,并且在随机索引处删除元素的速度与list一样快,因为在list中查找元素通常需要比从vector删除它们更长的时间vector

请注意,如果顺序无关紧要,您可以将pop_back的任意元素与结束元素交换,然后remove_if进行常量随机访问擦除。

如果您经常迭代容器,可以erase - unordered_set以便同时有效地擦除元素。如果擦除发生在与迭代不同的时间,则标记要删除的元素'然后在下一次迭代中擦除它们可以保持理智。

要考虑元素顺序无关紧要的另一个容器是{{1}}。