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