Я строю стек с использованием массивов (мой учитель не разрешает мне использовать контейнеры 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;
}