我知道,当插入在前端或末端时,deque比向量更有效,如果我们必须执行指针算法,则向量更好。但是,当我们必须在中间执行插入时,应该使用哪一个呢?为什么呢?
发布于 2012-09-14 14:51:55
您可能会认为deque具有优势,因为它将数据存储成块。但是,要在恒定时间内实现operator[],所有这些块都必须大小相同。插入或删除中间的元素仍然需要将所有的值移到一边或另一边,与vector相同。由于vector更简单,缓存的局部性更好,所以它应该领先。
发布于 2012-09-14 14:45:14
使用标准库容器的选择条件是,您根据以下情况选择一个容器:
如果要在中间执行大量插入操作,最好使用std::list。
如果选择只是在std::deque和std::vector之间,那么需要考虑以下几个因素:
max_size()可能更大。发布于 2012-09-14 14:43:08
对于大型容器,std::deque的性能可能更好,因为它通常是作为连续数据块的链接序列实现的,而不是std::vector中使用的单个块。因此,在中间插入将减少从一个地方复制到另一个地方的数据,并可能导致更少的重新分配。
当然,这是否重要取决于容器的大小和复制存储元素的成本。有了C++11移动语义,后者的成本就不那么重要了。但是最终,唯一知道的方法是使用一个实际的应用程序进行分析。
https://stackoverflow.com/questions/12426691
复制相似问题