使用运算符[]访问模板堆栈

时间:2018-08-28 14:52:12

标签: c++ arrays stack operators

我正在使用数组构建堆栈(我的老师不会让我使用std容器),并且被卡住了。即使我重新定义访问运算符[],当我按下按钮时,程序也会突然停止。 (出于可读性考虑,我同时实现了复制构造函数,operator =和摧毁者bur,我省略了这些方法。)

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 :(得分:0)

在编写自己的Stack类时,请记住这一点。如果要确保实际插入值,请实现一个top()函数,该函数返回值stack[top]。每top()之后检查push()。 话虽如此,在您的情况下_stack[_size] = value;不使用operator[]