gpt4 book ai didi

c++ - 这个堆栈的实现看起来有些不对劲,但它工作正常

转载 作者:行者123 更新时间:2023-11-28 02:31:50 25 4
gpt4 key购买 nike

我有这个任务,我需要使用数组实现一个堆栈(随你喜欢很简单)但是已经提供了三个方法,我只需要实现剩下的两个函数:peek() 和 flush()。

但是,我似乎不太同意 pop 提供的实现。我的意思是,当你在没有任何元素的情况下弹出时 (N == 0),那么它意味着类似于 Array[-1] 并且程序应该崩溃但它没有。请解释这是如何发生的(不是崩溃)。

class STACK {
private:
int* s;
int N;
public:
STACK(int maxN) {
s = new int[maxN];
N = 0;
}
int empty() const {
return N == 0;
}
void push(int item) {
s[N++] = item;
}
int peek() {
/* implement this part */
}
int pop() {
return s[--N];
}
void flush() {
/* also implement this part */

}
};

最佳答案

I don't quite seem to agree with the implementation of pop provided.

它有一个前置条件:如果栈为空则不能调用它。是强制执行该先决条件(检查它需要运行时成本)还是仅记录它(存在无效行为的风险)是您做出的设计决定。

Please explain how this (not crashing) happens.

未定义的行为不一定会导致程序崩溃。如果数组之前有可寻址内存,那么 s[--N] 将(几乎可以肯定)只读取那里的内容。如果没有,那么它可能会崩溃。

关于c++ - 这个堆栈的实现看起来有些不对劲,但它工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28769047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com