queue效率问题

 

同样的操作

时间差整整30倍

要是把queue开在循环里面可以上升到90倍!

#include <iostream>
#include <queue>
#include <cstdlib>
#include <ctime>
#pragma GCC optimize(2)
using namespace std;
queue<int>que;

int main()
{
    int time1, time2, time3;

    time1 = clock();
    for(int i = 1;i <= 1e6;i++)
    {
        int sum = 0;
        for(int ii = 1;ii <= 20;ii++) sum += ii;
    }
    time2 = clock();
    for(int i = 1;i <= 1e6;i++)
    {
        int sum = 0;

        for(int ii = 1;ii <= 20;ii++) que.push(ii);
        while(que.size()) sum += que.front(), que.pop();
    }
    time3 = clock();

    cout << "time1 " << time2 - time1 << endl;
    cout << "time2 " << time3 - time2 << endl;
    return 0;
}

 

### 队列数据结构的用途与实现 队列为一种抽象数据类型(ADT),遵循先进先出(FIFO, First-In-First-Out)的原则,在操作系统以及算法设计中有广泛应用[^1]。 #### 操作系统的应用实例 在多道程序环境中,作业调度可以利用队列来管理等待处理的任务列表;设备驱动也可能采用队列机制存储输入/输出请求直到硬件资源可用为止。这有助于提高计算机系统的效率并简化编程模型。 #### 常见操作方法 对于一个标准的队列而言,主要支持两种基本的操作:入队(enqueue),即将新元素添加到队尾;出队(dequeue), 则是从队头移除最前面的一个成员。除此之外还有查看当前头部项而不删除它的 peek() 方法等辅助功能。 以下是 Python 中基于列表实现简单循环缓冲区版本 Queue 的例子: ```python class CircularQueue: DEFAULT_CAPACITY = 10 def __init__(self): self._data = [None]*CircularQueue.DEFAULT_CAPACITY self._size = 0 self._front = 0 def is_empty(self): return self._size == 0 def first(self): if self.is_empty(): raise Exception('Queue is empty') return self._data[self._front] def dequeue(self): if self.is_empty(): raise Exception('Queue is empty') answer = self._data[self._front] self._data[self._front] = None self._front = (self._front + 1) % len(self._data) self._size -= 1 return answer def enqueue(self,e): if self._size == len(self._data): self.resize(2 * len(self.data)) avail = (self._front + self._size) % len(self._data) self._data[avail] = e self._size += 1 def resize(self,capacity): old = self._data walk = self._front self._data = [None]*capacity for k in range(self._size): self._data[k] = old[walk] walk = (1 + walk)%len(old) self._front = 0 ``` 上述代码定义了一个固定大小可动态扩展容量的支持 FIFO 行为的数据容器类 `CircularQueue` 。通过取模运算实现了内存空间的有效重复利用率最大化的同时保持了 O(1) 时间复杂度下的核心接口性能特性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值