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