下面的代码是我自己的实现我的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类型的变量
正如你所看到的那样,将我的阵列中的元素移动到临时变量中。我的问题是我如何解决这个问题?我如何向上或向下移动索引以将项目推送到数组的前面?我试图让数组的内容保留在数组中..
有什么想法吗?
答案 0 :(得分:2)
你在那里或曾经拥有的是stack。
我想你想要的是ring buffer。
当你的索引越过数组的末尾时,你将它重新设置为0.(它包装。)当它超过结束索引时,你将该索引设置回到开始。您可以在结束索引之后插入元素,只要它不与起始索引重叠即可。