堆栈的这个实现看起来有问题,但它运行良好
Something looks wrong in this implementation of stack but it works fine
我有一个任务,需要使用数组实现堆栈(很简单),但其中三个方法已经提供,我只需要实现剩下的两个函数: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 */
}
};
我似乎不太同意所提供的pop的实现。
它有一个先决条件:如果堆栈为空,就不能调用它。是强制执行该前提条件(检查该前提条件需要运行时成本)还是只记录它(有无效行为的风险)是您的设计决策。
请解释这(不是崩溃)是如何发生的。
未定义的行为并不一定会导致程序崩溃。如果数组之前有可寻址内存,那么s[--N]
(几乎可以肯定)只会读取其中的内容。如果没有,那么它可能会崩溃。
你说得对。当堆栈为空时,写入的pop函数将失败。
在数组开始之前访问数据是未定义的行为,这确实意味着这一点。它可以做任何事情,包括不崩溃。
相关文章:
- 我似乎对if/else的基本语句有问题:/
- 我在范围内未声明的错误类有问题
- 我的C++语言蛮力算法有问题
- 我关于函数"Assert"的C++代码有问题
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- C++类中的友元函数有问题?
- 我对数组即 0x6dfe78 有问题
- 我对 std::unique(算法)C++有问题
- 使用 fstream 库并在屏幕上打印的文件有问题?
- 这个模板为什么有问题?如何正确编译
- 我对 MyGraph 属性顶点名称和边权重有问题
- delete[]有问题,如何部分删除内存
- 在C++中使用exit()退出程序有问题吗
- 跳转到if(false)块有问题吗
- 查找有问题的宏
- 使用 rand() 和 srand() 有问题
- C++ 回文程序总是给出 0(假)作为输出问题;我的代码哪里有问题?
- 我在 C++ "out_of_range at memory location"有问题
- 我正在尝试运行CUDA示例,但是我在Ubuntu 16.04 Lts上的OpenGL(libglew.a)有问题
- 堆栈的这个实现看起来有问题,但它运行良好