class MinStack {
Stack stack;
Stack Minstack;
public MinStack() {
stack = new Stack();
Minstack = new Stack();
}
public void push(int val) {
stack.push(val);
int min = val;
if (Minstack.isEmpty()) {
Minstack.push(min);
}
else {
if (Minstack.peek() > min) {
Minstack.push(min);
}
}
}
public void pop() {
int val = stack.pop();
if (Minstack.peek() == val) {
Minstack.pop();
}
}
public int top() {
return stack.peek();
}
public int getMin() {
return Minstack.peek();
Подробнее здесь: [url]https://stackoverflow.com/questions/79174474/why-am-i-getting-an-empty-stack-error-on-line-return-minstack-peek[/url]
Я не понимаю, почему моя первая реализация pop неверна, а вторая правильна?
Неверно
public void pop() {
if (mainStack.peek() == auxStack.peek()) {
mainStack.pop();
auxStack.pop();
} else {
mainStack.pop();
}
}
Стандарт C++ гласит, что возврат ссылки на локальную переменную (в стеке) является неопределенным поведением, так почему же многие (если не все) текущие компиляторы только выдают предупреждение об этом ?