我如何修复这段代码,使它不会pop_back或back()如果向量/堆栈是空的
How do i fix this code so that it wont pop_back or back() if the vector/stack is empty?
我的Stack.h有问题,我不确定我错过了什么。我收到一个分割错误错误。我知道它与"void pop()"answers"T top()"函数有关。我很确定这是由空堆栈引起的。通过只编辑这两个函数,我如何确保我的程序将运行?我的.cpp文件需要有s2。弹出(!s2.empty)复选框
答案是,您应该在最后真正删除s2.pop()
。它在那里没有意义。
while (!s2.empty()) {
cout << s2.top();
s2.pop();
} // s2 is always empty by now, another pop() wouldn't make sense.
cout << endl;
s2.pop();
您可以将pop()
函数更改为
void pop() {
if (!empty())
container.pop_back();
}
那么你的pop()
将工作,即使在一个空的堆栈,但你的top()
仍然会崩溃。你也不能那么容易地修复top()
,这样你就会得到不同的行为,这是令人困惑的,你不应该有。或者一些不直观的实现也很糟糕。
删除最后一行s2.pop();
。当您到达那里时,堆栈已经是空的,因为堆栈为空是上面循环的退出条件。
相关文章:
- 如果没有malloc,链表实现将失败
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- C++擦除(如果存在)
- 如果"new int"返回"int*",那么为什么"new int[n]"不返回"int**"?
- 在'如果'陈述输出如何正确
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 如果基类包含双指针成员,则派生类的构造函数
- 如果没有数学库,我如何在C++中创建复利公式
- 如果我已经有一个头,那么模板(-t)文件属于哪里
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 我如何修复这段代码,使它不会pop_back或back()如果向量/堆栈是空的