unsigned mySize; // number of items I contain
unsigned myCapacity; // how many items I can store
unsigned myFirst; // index of oldest item (if any)
unsigned myLast; // index of next available spot for append (if any)
Item* myArray; // dynamic array of items
我正在创建一个基于动态数组的队列类,需要创建一个方法来更改队列可以容纳的项目数。我需要" myLast"在容量发生变化后保持准确,特别是在已经从前面出队的物品的队列中。
void ArrayQueue<Item>::setCapacity(unsigned cap) {
if (cap < getSize() || cap == 0){
throw QueueException("setCapacity()", "New capacity must be greater than size");
} else {
Item * nq = new Item[cap];
for (unsigned i = 0; i < cap; i++){
nq[i] = myArray[i];
}
delete [] myArray;
myArray = nq;
myCapacity = cap;
//what do I put here to make myFirst and myLast be correct for the new capcacity?
}
}
任何人都可以解释如何做到这一点吗?
答案 0 :(得分:0)
没什么 - 我的第一次和我的最后都不会改变你所拥有的东西 - 除非你正在使用一个循环队列(我打赌你是),在这种情况下,你不能只是复制新数组上的原始数组。如果您只是将旧数组复制到新数组上,那么任何包裹的条目都将不合适。你需要处理它已经缠绕的可能性。
你的for循环有问题:
for (unsigned i = 0; i < cap; i++){
nq[i] = myArray[i];
}
如果cap
大于myCapacity(例如myArray的大小),它将在myArray结束时运行。
答案 1 :(得分:0)
如果您愿意,可以在队列中更改容器..
std::queue<int,std::list<int>> myQueue
像这样......