【发布时间】:2016-07-03 23:40:57
【问题描述】:
我需要在堆栈中找到一个元素,所以我发现我必须弹出元素,直到我找到这个元素或堆栈为空。换句话说,当找到元素或堆栈为空时不会弹出。我的思维方式有什么问题?
while (!(stack.top()==searched || stack.empty()))
{
tmp.push(stack.top());
stack.pop();
}
如果堆栈不计算搜索到的元素,则代码返回核心转储,但如果 stack.top()==searched 始终返回 0,并且 stack.empty 返回 1,1 OR 0 仍为 1; !1=0 和 'while' 应该停止。 有没有办法做到这一点?我愿意接受建议。
【问题讨论】:
-
反转 while 条件中表达式的顺序。您不应该在空堆栈上调用
stack.top(),但在检查第二个表达式之前您不知道它是空的。 -
不是重复的。任何想法如何避免查看空堆栈的问题?
-
如果您查看我的链接,您会发现建议的答案(双端队列上的
std::find)正是您所需要的。如果您的堆栈为空,deque::begin和deque::end将是相同的,因此std::find将返回deque::end,就像在任何其他未找到该元素的情况下一样。 -
imo 如果您需要在堆栈中查找项目,则不应使用堆栈。使用
vector并将其视为堆栈,然后您可以使用std::find