我正在使用STL双端队列结构,并且在算法的每次迭代中,都从前面删除了n元素,并在最后添加了n元素。因此,基本上,我的双端队列大小从未改变,并且我正在进行数百万次迭代。

有没有办法确保内存大小在其生命周期内不发生变化(或至少不会减少)?也许由于双端队列的底层实现,这是不可避免的,但我想确定一下。

最佳答案

不,您不能总是期望这种行为。这些是特定于实现的细节。我认为标准中没有任何规范要求这种行为。

但是,还有另一种解决方案。您可以在boost中使用循环缓冲区。 (文档:https://www.boost.org/doc/libs/1_67_0/doc/html/circular_buffer.html
它为您所需的确切功能提供了最优化的实现之一。
它将在给定大小的构造上分配内存(因为您提到的常量)。并且在调用和pop_ {front / back}时,它不会取消分配内存,也不会在push_ {front / back}上分配。它只是移动了开始和结束迭代器以指向适当的成员。

因此,您所需的所有操作都将是O(1)。它还提供了空间局部性,因此遍历非常快。

关于c++ - STL双端队列:保持最小大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33634333/

10-09 16:29