Стек C ++ по реализации массива

Я хочу, чтобы функция pushFront (int) выполняла следующие действия:

bool stack::pushFront( const int n )
{
  items[++top] = n;  // where top is the top of the stack
  return true; // only return true when the push is successful
}

items - это структурный тип объекта "item". Посмотри:

class stack
{
  stack(int capacity);
  ~stack(void);
  ...
  private:
    int maxSize; // is for the item stack
    int top;     // is the top of the stack
    struct item {
    int n;
    };
    item        *items;             

Я определил ctor для объекта класса стека и dtor следующим образом:

stack::stack(int capacity)
{   
    items = new item[capacity];

    if ( items == NULL ) {
      throw "Cannot Allocoate Sufficient Memmory";
      exit(1); 
    }
    maxSize = capacity;
    top     = -1;
}

stack::~stack(void)
{
    delete [] items;

    items    = NULL;
    maxSize  = 0;
    top      = -1;
}

Да, основная проблема для меня - это items [++ top] = n; утверждение. Я пытался найти способы обойти это, как показано ниже:


bool stack::pushFront(const int n)
{
    int *a = new int[maxSize];
    a[++top] = n;

    return true;
}

Но я не могу перетащить (+) массив 'a', чтобы увидеть эти фактические элементы массива ... Это то, на что я надеялся ..

Я хочу, чтобы элементы оператора [++ top] = n; работать..


person user40120    schedule 07.09.2009    source источник


Ответы (2)


Вы не можете присвоить элементу значение типа int, потому что вы не сказали компилятору, как это сделать.

Вам нужно либо написать конструктор, либо оператор = для элемента, который принимает в качестве параметра int, либо использовать

items[++top].n = n;
person Geerad    schedule 07.09.2009

Похоже, вы определили стопку фиксированного размера. Вы должны убедиться, что добавление в стек не превышает размера. Для pushFront вам просто нужно скопировать данные в массив, чтобы освободить место для изменения 0-го элемента:


bool stack::push(const int n)
{
    if ( top >= capacity-1 ) return false;
    items[++top].n = n
}

bool stack::pushFront(const int n)
{
    if ( top >= capacity-1 ) return false;
    bcopy( items, items+1, top+1 );
    items[0].n = n;
    return true;
}
person Timothy Pratley    schedule 07.09.2009
comment
фактически, элементы оператора [++ top] = n; в теле функции bool stack :: pushFront (const int n) недопустима, и я получаю эту ошибку: ошибка C2679: двоичный '=': не найден оператор, который принимает правый операнд типа 'const int' ( или нет приемлемой конверсии). Далее следует: может быть 'stack :: item & stack :: item :: operator = (const stack :: item &)' Как мне избежать написания кода в виде элементов [++ top] = n; ? - person user40120; 07.09.2009
comment
везде, где я использую элементы как массив, присвоенный n, я получаю сообщение об ошибке: / - person user40120; 07.09.2009
comment
Как указал Гирад, это должно быть: items [++ top] .n = n; потому что items - это структура. - person Timothy Pratley; 07.09.2009