考虑我将随机数量的项目添加到容器中的情况,即无法预测容器的大小,插入的频率高,插入的频率应该是容器,除了我想删除一个几乎恒定时间的元素。
注意:我还想在共享内存中使用列表或向量。
所以在这种情况下,最好使用std :: vector或std :: list?
答案 0 :(得分:5)
通过评论中的澄清,答案是std::vector
。这并不奇怪,因为std::list
很少是工作的最佳容器。
向末尾添加元素是分摊常量时间,并且在随机索引处删除元素的速度与list
一样快,因为在list
中查找元素通常需要比从vector
删除它们更长的时间vector
。
请注意,如果顺序无关紧要,您可以将pop_back
的任意元素与结束元素交换,然后remove_if
进行常量随机访问擦除。
如果您经常迭代容器,可以erase
- unordered_set
以便同时有效地擦除元素。如果擦除发生在与迭代不同的时间,则标记要删除的元素'然后在下一次迭代中擦除它们可以保持理智。
要考虑元素顺序无关紧要的另一个容器是{{1}}。