我使用动态数组来实现我的堆栈。我写了pop如下:
int pop() {
int n = arr[--arr.length];
return n;
}
使用上面的代码我在运行时遇到Range violation
错误。但是使用以下代码:
int pop() {
int n = arr[arr.length - 1];
arr.length--;
return n;
}
工作正常。我不明白为什么,对我来说两者都应该是等价的。我错过了什么?
编辑:
也许这就是为什么--arr.length
导致我要访问的元素被删除"从数组?
此外,push(N)
只是arr ~= n;
答案 0 :(得分:5)
您在抓取之前删除了该元素。您必须检索元素,然后减小数组的大小。
--arr.length
正在减少数组的长度,然后返回新的缩小大小。然后,您尝试执行int n = arr[arr.length]
。
这是int n = arr[ --arr.length ]
的简单练习,包含一个元素:
--arr.length
int n = arr[0]
。