Доступ к стеку шаблонов с помощью оператора [] - PullRequest
0 голосов
/ 28 августа 2018

Я строю стек с использованием массивов (мой учитель не разрешает мне использовать контейнеры std), и я застрял. Хотя я переопределяю оператор доступа [], когда я нажимаю, программа внезапно останавливается. (Я реализовал и конструктор копирования, оператор = и разрушитель, но для удобства чтения я опустил эти методы).

template <typename T>
class stack{
private:
   unsigned int _capacity;  //capacità massima
   unsigned int _size;      //dimensione attuale
   T* _stack;
public:
    stack()
    : _capacity(10), _size(0), _stack(0){}
    T& operator[](unsigned int _index)  
        {
           assert(_index < _size);
           return _stack[_index];
        }
void push (const T &value){
    if (_size == _capacity){    //double the stack dimension
        if(_capacity==0)
            _capacity=10;
        _capacity *= 2;
        T* tmp = new T[_capacity];
        copy_n(_stack, _size, tmp);
        swap(_stack, tmp);
        delete[] tmp;
    }
    _stack[_size] = value;
    ++_size;
}

void print(){
    for(unsigned int i = 0; i < _size; ++i)
        cout << _stack[i] << " ";
    cout << endl;
}

Моя главная проста:

int main(){
    stack<int> s;
    s.push(2);
    s.print();
    return 0;
}

1 Ответ

0 голосов
/ 28 августа 2018

Когда вы пишете свой собственный класс стека, имейте это в виду. Если вы хотите убедиться, что ваше значение действительно было вставлено, реализуйте функцию top(), которая возвращает значение в stack[top]. Проверяйте top() после каждого push(). При этом в вашем случае _stack[_size] = value; не использует operator[]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...