我正在使用STL deque结构,在我的算法的每次迭代中,我从前面删除n
元素并在末尾添加n
元素。所以,基本上,我的deque大小永远不会改变,我正在进行数百万次迭代。
有没有办法确保内存大小在其生命周期内不会改变(或至少不会降低)?也许由于deque的底层实现或许这是不可避免的,但我想确定。
答案 0 :(得分:2)
不,你不能总是期待这种行为。这些是特定于实现的细节。我不认为标准中有任何规范要求这种行为。
然而,还有另一个解决方案。你可以在boost中使用循环缓冲区。 (文件:https://www.boost.org/doc/libs/1_67_0/doc/html/circular_buffer.html) 它为您所需的确切功能提供了最优化的实现之一。 它将在给定大小的构造上分配内存(因为它的常量如你所提到的)。在调用和pop_ {front / back}时,它不会释放内存,也不会在push_ {front / back}上分配。它只是将开始和结束迭代器移动到指向适当的成员。
因此,您需要的所有操作都是O(1)。它还提供空间局部性,从而使遍历非常快。