可随机访问的队列

需求

最近在做毕设,关于手势识别的,自己yy了一种算法,实现里面为了方便,需要一种可供我随机访问的大小固定的队列。

矛盾就是,STL里提供的队列只能访问队头,所以就自己实现了一发。

设计

众所周知,要支持随机访问,那么底层就得用数组来实现!我选择了vector(用原始数组也完全没问题,因为细节可以自己控制,不用怕client使用时会越界)。

具体方法是,自己维护一个循环数组,即设立一个头指针,一个尾指针,注意两者的含义要维持在每种操作的前后都不变:

head:表示当前队列里头最旧的一个元素的下标
tail:表示当前队列里,新被插入元素应该放的位置的下标

举个例子,空队列时,head = 0(问:难道不应该是-1?答:特殊的点,没什么,为了写代码方便而已),tail = 0。
插入第一个元素时,根据tail的指示,应该把它放在下标为tail=0的位置!插入后,tail应该变成1了,因为下一个应该放的位置是1!

代码与问题

代码很短,还有一个点可以看的,就是operator []提供了两种版本,分别返回T&const T&
为什么呢?
因为有需要啊,比如下面代码里的display函数;还有使用const对象时,如果只有非const版本,则无法调用该函数!
但是两者的代码又是一模一样的,重复不好
根据《Effective C++》的指示,可以在后者(const)里面调用前者(非const);反过来,则不行,想想为什么?(文末有答案)

代码如下,由于写成了模板,所以声明和实现放在同个文件里头了:

#ifndef __N_RANDOME_QUEUE_H__
#define __N_RANDOME_QUEUE_H__

#include <vector>
using std::vector;  // 尽量不要用using namespace std;


template<
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值