为充分利用向量空间,克服“假溢出”现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。循环队列是把顺序队列首尾相连,把存储队列元素的表从逻辑上看成一个环,成为循环队列。
上次分享了一个基于std:array类库开发的Cycle Queue,有两点缺陷,这也是硬伤
-
这个库基于std::array实现,是固定长度的,不能动态分配内存
-
这个库在VS2015中编译会出现问题,而在VS2017或更高版本的编译器中编译通过,如果要使用这个库,必须得把VS升级到2017以上的版本
此次再次分享一个基于C++实现的Cycle Queue类库,支持批量push、pop、sliding等操作,使用非常方便,但是缺点也很明显,没有采用模板类库,内部采用unsigned char*
来存储数据,缺陷显而易见,对于数据类型的支持不是很好,如果更改成模板类库可能使用会更方便!
其次,这个库有很多bug:
- push数据时,会把最后一个内存空间空下来,最初笔者以为是故意把最后一个空间留空不用,后来发现是程序bug
- 当push数据到内存尾部,返回到内存空间头部时,尾指针位置计算错误
原始代码代码如下:
头文件:RoundRobinQueue.h