push_front C ++用户实现

时间:2009-10-29 20:57:28

标签: c++

我试着在C ++双端队列中实现push front方法。我这样做的方式是移动数组的每个元素。它工作正常,但我的程序最终崩溃了!在我的推送前端方法中,我似乎“跑过我的数组的末尾”,导致堆损坏错误,调试断言,那些事情..

我没有能够在不移动数组的情况下开发push_front实现。

stack::stack(capacity) : items(new item[capacity]), front(*items), maxSize(capacity-1)
{
    top = -1;
}

bool stack::pushFront(const int nPushFront)
{     
        if ( count == maxSize ) // indicates a full array
        {
            return false;
        }
        for ( int entry_int = 0; entry_int < count; ) // loop less than however many we count.
        {
            if ( entry_int == top+1 )
            {
                front.n = items[top+1].n;
            }
            items->n = items[++entry_int].n;
            items[entry_int].n  = front.n;
            front.n = items[++entry_int].n;
            items[entry_int].n  = items->n;
        }
        ++count;
        items[top+1].n = nPushFront;
        return true;    
}

任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

通过保持前后偏移/指针,这很容易做到。例如,查看boost circular buffer

答案 1 :(得分:0)

bool Stack :: PushFront(const int nElement) {

  if(count == maxSize) return false;

  for(int i = count ; i > 0; i--) 
  {
      items[i].n = items[i-1].n;
  }   

  item[top+1].n = nElement; 
  count++;      
  return true; 

}