C++生长圆形阵列
Growing a circular array C++
我正在尝试以数组的形式编写一个通用队列。 如果我将 arraySize 设置为特定值,一切似乎都可以工作,但是如果我每次填充数组时都尝试增大数组,则会导致值被覆盖。 我感谢任何关于我做错了什么的建议。 谢谢
页眉:
#ifndef QUEUE_ARRAY
#define QUEUE_ARRAY
template <typename E>
class Queue {
public:
Queue(); //constructor
//Queue(const Queue &obj); //copy constructor note:the copy constructor is optional
~Queue(); //destructor
void enqueue(const E& e);
const E& dequeue(); //throw(QueueEmpty); //note that the use of exceptions is optional
const E& front() const; //throw(QueueEmpty); //note that the use of exceptions is optional
int size() const;
bool empty() const;
private:
int frontElem, rear, numEntries, arraySize;
E* queueArray;
};
#endif //
质量保证计划:
#include "QueueArray.h"
#include <iostream>
template<typename E>
Queue<E>::Queue() {
numEntries = 0;
arraySize = 1;
frontElem = 0;
rear = 0;
queueArray = new E[arraySize];
}
template<typename E>
Queue<E>::~Queue() {
delete[] queueArray;
}
template<typename E>
void Queue<E>::enqueue(const E & e) {
if (numEntries == arraySize) {
arraySize = arraySize * 2;
E* temp = new E[arraySize];
for (int i = 0; i < numEntries; i++) {
temp[i] = queueArray[(frontElem + i) % arraySize];
}
delete queueArray;
queueArray = temp;
}
queueArray[rear] = e;
rear = (rear + 1) % arraySize;
numEntries++;
}
template<typename E>
const E& Queue<E>::dequeue() {
E &temp = queueArray[frontElem];
frontElem = ((frontElem + 1) % arraySize);
numEntries--;
return temp;
}
template<typename E>
const E& Queue<E>::front() const {
return queueArray[frontElem];
}
template<typename E>
int Queue<E>::size() const {
return numEntries;
}
template<typename E>
bool Queue<E>::empty() const {
return (numEntries == 0);
}
质量保证扩展:
#include "QueueArray.cpp"
using namespace std;
template class Queue<int>;
质量保证测试:
#include "QueueArray.h"
#include <iostream>
using namespace std;
int main() {
Queue<int> *s;
s = new Queue<int>();
for (int i = 1; i <= 25; i++){
s->enqueue(i);
}
while (!s->empty()) {
cout << "Dequeue: " << s->dequeue() << endl;
}
system("PAUSE");
delete s;
}
当您将现有队列数据复制到 enqueue
中新分配的缓冲区时,将元素 frontElem
处的元素复制到元素 0。 您没有和需要的是复制数据后frontElem = 0;
。 rear
也需要更新。
delete queueArray
应该是delete [] queueArray
. 由于您要分配数组,因此需要删除数组。
相关文章:
- OpenMP阵列性能较差
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 当我的阵列太大时出现分段错误
- 长 长 int 不要 长 int 好
- 如何创建一个QTableWidgetItem,用长文本右对齐,左边有省略号
- rcpp函数中的清理时间很长
- 我想知道长双倍和双倍之间的区别
- 为什么std::互斥需要很长的、非常不规则的时间来共享
- 求最长递增子序列C++的长度
- ReadProcessMemory() 不适用于像 0x2840C6C68D8 这样的长地址
- 使用Boost Interprocess创建托管共享内存需要很长时间
- 位阵列上的快速AND运算
- 算法 - 圆形阵列旋转
- C++生长圆形阵列
- 查找有效内部圆形内部阵列的索引
- 结构中的Visual Studioc 阵列大小太长
- 我可以使用未签名的长阵列吗?
- 字符阵列的初始化器 - 弦弦是太长的错误
- 针对标准::复杂<长双>阵列的增强 MPI 降低