循环数组C ++

时间:2009-10-29 23:45:59

标签: c++ arrays

下面的代码是我自己的实现我的items数组的push_front方法。我想知道是否有人可以帮我弄清楚如何实现该方法,以便我只是向上或向下移动索引。我需要我的物品留在阵列中,而不是将它们倾倒在一个“前面”的变量中:

stack::stack(int capacity) : items(new item[capacity]), maxSize(capacity),
count(0), top(-1)
{
    intFront = 0;
}


bool stack::pushFront(const int nPushFront)
{     
    if ( count == maxSize ) // indicates a full array
    {
        return false;
    }
    for ( int shift = 0; shift < count; )
    {
        if ( shift == top+1 )
        {
            intFront = items[top+1].n;
        }
        items->n = items[++shift].n;
        items[shift].n = intFront;
        if ( shift != maxSize-1 )
        {
            intFront = items[++shift].n;
            items[shift].n = items->n;
        }
    }
    ++count;
    items[top+1].n = nPushFront;

    return true;    
}

items-&gt; n指向struct member n,它是一个int类型的变量

正如你所看到的那样,将我的阵列中的元素移动到临时变量中。我的问题是我如何解决这个问题?我如何向上或向下移动索引以将项目推送到数组的前面?我试图让数组的内容保留在数组中..

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

你在那里或曾经拥有的是stack

我想你想要的是ring buffer

当你的索引越过数组的末尾时,你将它重新设置为0.(它包装。)当它超过结束索引时,你将该索引设置回到开始。您可以在结束索引之后插入元素,只要它不与起始索引重叠即可。