Deque vs队列速度
Deque vs Queue Speed
i在leetcode上处理问题(此处)。当我完成问题时,我想到了:
class MovingAverage {
std::deque<int> numsToAverage;
int maxSize;
int currentTotal;
public:
/** Initialize your data structure here. */
MovingAverage(int size) {
maxSize = size;
currentTotal = 0;
}
double next(int val)
{
currentTotal += val;
numsToAverage.push_back(val);
if (numsToAverage.size() > maxSize)
{
currentTotal -= numsToAverage[0];
numsToAverage.pop_front();
}
return (double)currentTotal / (double)numsToAverage.size();
}
};
之后,我看到另一个解决方案与我的相似,但使用了队列。出于好奇,我仅将deque交换为队列,然后从第18个百分位数(Deque)跳到了第56个百分位数(Queue)。这是队列代码:
class MovingAverage {
std::queue<int> numsToAverage;
int maxSize;
int currentTotal;
public:
/** Initialize your data structure here. */
MovingAverage(int size) {
maxSize = size;
currentTotal = 0;
}
double next(int val)
{
currentTotal += val;
numsToAverage.push(val);
if (numsToAverage.size() > maxSize)
{
currentTotal -= numsToAverage.front();
numsToAverage.pop();
}
return (double)currentTotal / (double)numsToAverage.size();
}
};
我的问题是专门的为什么?我检查了std ::队列,并且默认为Deque!为什么在地球上会更快,因为它是队列?我唯一的猜测是,它正在缓存该价值一些?但与此同时,默认情况下是一个排队!插入/删除时间实际上不能更好!
(旁注,我不考虑大小== 0的情况>
这是一个受过教育的猜测:
内存控制器具有预取的"交手",可奖励连续的,上升的内存访问,但对于以降序的顺序访问速度较慢。
因此,用作FIFO容器的Deques具有推动一侧并在另一侧弹出的首选方向。
可能,您的Deque代码使用最不喜欢的方向。但是,已经对队列实现进行了优化,以最喜欢的方向使用基础deque。
有一种简单的方法来检验这一假设(鉴于这些是非保证的实施细节)。在您的Deque代码中,切换
push_back --> push_front
和pop_front --> pop_back
。如果假设是正确的,则Deque代码应加速与队列实现一样快: - )
相关文章:
- boost::进程间消息队列引发错误
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- Android NDK传感器向事件队列报告奇怪的间隔
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 为什么在读取文件大小时文件IO速度会发生变化
- 按对象的特定方法按升序排列的C++优先级队列
- 使用2个键的cpp-stl::优先级队列排序不正确
- 我是否需要在下一次转移时将所有权*转移回转移队列
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 文件系统:复制功能的速度秘诀是什么
- 在一个读写器队列中,我可以用volatile替换原子吗
- 为什么我的多线程作业队列崩溃
- 尝试将lambda函数放在队列中时出现一般分配器错误(可能是与unique_ptr有关的错误)
- 使用"Task"函数指针队列定义作业管理器
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 在c++队列中使用pop和visit实现线程安全
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 使用boost.lockfree队列比使用静音速度慢
- C++ 并发队列:速度较慢,> 1 个线程
- Deque vs队列速度