我正在使用数组构建堆栈(我的老师不会让我使用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;
}
答案 0 :(得分:0)
在编写自己的Stack类时,请记住这一点。如果要确保实际插入值,请实现一个top()
函数,该函数返回值stack[top]
。每top()
之后检查push()
。
话虽如此,在您的情况下_stack[_size] = value;
不使用operator[]