改变队列C ++容量的方法

时间:2014-04-23 17:32:02

标签: c++ queue dynamic-arrays capacity

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?
       }
    }

任何人都可以解释如何做到这一点吗?

2 个答案:

答案 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
像这样......