c++ - STL 双端队列 : keep minimum size

标签 c++ stl deque

我使用的是 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 双端队列 : keep minimum size,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33634333/

相关文章:

c++ - 我有两棵二叉树。我想在不改变输入树的情况下深度复制两个二叉树的结果

c++ - 为什么我更喜欢使用 vector 到双端队列

c++ - 如何将 deque>>vector>>bytes 迭代到函数

c++ - "Function template has already been defined"与互斥的 `enable_if` s

c++ - 如何从 C++ 文件中读取第一个数字

c++ - 使用函数的返回值初始化对象时不调用复制构造函数

c++ - 在堆上分配 shared_ptr 是否可能存在内存泄漏?

c++ - 为什么我的自定义迭代器不能使用 STL 拷贝?

c++ - 如何使用 vector<pair<double, uint>> 为 STL partial_sum 实现 binOp 仿函数?

c++ - 双端队列实现选项