【发布时间】:2021-06-07 13:59:45
【问题描述】:
我在编写代码/函数来检查提供用户的号码是否属于std::stack 时遇到问题。我尝试以不同的方式制作它,但我没有找到任何可行的解决方案。
我试过了:
std::stack<int> myStack;
const bool isInStack = myStack.find(userNumber) != myStack.end();
我也试过了:
std::stack<int> myStack;
if (myStack.count(userNumber)) {
// x is in the set, count is 1
} else {
// count zero, i.e. x not in the set
}
我也尝试编写自己的模板,但我做不到,它也无法正常工作。我不知道如何让它工作。
我收到class std::stack<int, std::deque<int, std::allocator<int>>>" has no member "find" 之类的错误
谁能帮帮我?我真的很生气。
【问题讨论】:
-
在使用标准库组件时遇到错误,check the reference 首先确保您正确使用它。正如您在链接中看到的,
std::stack没有find或count函数。你确定你应该使用std::stack而不是std::set吗? -
std::stack提供了一个栈接口,它可以将新元素压入栈顶,也可以弹出栈顶元素。如果您需要更多操作,std::stack is not the appropriate container.std::vector` 提供了push_back和pop_back,因此它可以用作堆栈,并且可以访问其所有元素。 -
我知道我可以用矢量来做,但我的工作是用堆栈来做......我不知道我该怎么做。也许我可以创建帮助程序堆栈或某事,但我不知道如何
-
std::stack应该作为堆栈工作,因此Last In First Out功能。此模板提供了满足 LIFO 要求的最小 API。不允许随机或顺序访问元素。所以基本上你应该用其他容器替换std::stack。如果您的任务有其他内容,也许您可以提供完整的描述,这样我们就可以清楚地了解您为什么有这个奇怪的要求。 -
你在问如何用锤子拧螺丝。
std::stack不是用于此目的的正确工具。如果您必须使用std::stack,那么您可能需要清空堆栈以检查每个元素,例如将堆栈的每个元素移出另一个堆栈,检查每个元素以查看它是否您正在寻找的那个。严格来说,可以从std::stack派生来访问protected成员c可以直接访问底层容器。但这通常是一个非常人为的解决方案。正确的解决方案是不要为此使用std::stack。