Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在stl堆栈cpp中查找元素_C++_Search_Stl_Stack - Fatal编程技术网

C++ 在stl堆栈cpp中查找元素

C++ 在stl堆栈cpp中查找元素,c++,search,stl,stack,C++,Search,Stl,Stack,我需要在堆栈中找到一个元素,所以我想我必须弹出元素,直到找到这个元素或者堆栈为空为止。换句话说,当元素被找到或堆栈为空时不弹出。我的思维方式有什么问题 while (!(stack.top()==searched || stack.empty())) { tmp.push(stack.top()); stack.pop(); } 如果stack不计数搜索的元素,但如果stack.top()==搜索始终返回0,并且stack.empty返回1、1或0仍然是1,则代码返回核心转储!

我需要在堆栈中找到一个元素,所以我想我必须弹出元素,直到找到这个元素或者堆栈为空为止。换句话说,当元素被找到或堆栈为空时不弹出。我的思维方式有什么问题

while (!(stack.top()==searched || stack.empty()))
{
    tmp.push(stack.top());
    stack.pop();
}
如果stack不计数搜索的元素,但如果stack.top()==搜索始终返回0,并且stack.empty返回1、1或0仍然是1,则代码返回核心转储!1=0且“while”应停止。
塞拉有办法吗?我愿意听取建议。

您的代码似乎依赖于此。然而,它的工作方式是

cond_a || cond_b

首先计算
cond_a
,只有在需要时才计算
cond_b
。在这种情况下,您的代码只会在检查了
top
之后检查堆栈是否为空,这显然是一个错误。您应该颠倒两个内部条件的顺序。

颠倒while条件中表达式的顺序。您不应该在空堆栈上调用
stack.top()
,但在检查第二个表达式之前,您不知道它是空的。它的可能副本不是副本。如何避免查看空堆栈时出现问题?如果您查看我的链接,您将看到建议的答案(
std::find
on a deque)正是您所需要的。如果堆栈为空,
deque::begin
deque::end
将是相同的,因此
std::find
将返回
deque::end
,就像在未找到元素的任何其他情况下一样。如果需要在堆栈中查找项,则不应使用堆栈。使用
向量
并将其视为堆栈,然后您可以使用
std::find
非常感谢,但我们不要忘乎所以:-)祝您好运!