【问题标题】:Using std::max_element on a stack<int>在堆栈上使用 std::max_element<int>
【发布时间】:2015-12-26 11:15:33
【问题描述】:

我如何才能获得堆栈的 max_element ? STL 堆栈没有任何 begin()end() 方法,我可以通过以下方式获得最大值:

auto max = max_element(c.begin(), c.end());

【问题讨论】:

  • std::stack 的重点是它是一个堆栈。选择不同的适配器或无适配器。也许std::priority_queue 是你想要的。
  • 不,priority_queue 对我不起作用,因为我需要按原样安排。 :)
  • 但是还需要遍历容器,所以不能有适配器。然后使用std::vector。你仍然可以push_backpop_backbackstd::stack 只是隐藏了其他所有内容。
  • stackoverflow.com/questions/13428618/…。您需要对堆栈进行子类化。最好使用私有继承。
  • @LogicStuff,完全正确!谢谢,你可以回答它:)

标签: c++ stl stack


【解决方案1】:

std::stack 有一个受限接口,这是该抽象的重点。如果没有,那么您可以使用例如std::deque。但是您有多种选择:

  • 您可以弹出所有项目。如果您希望最后的原始堆栈返回,那么您可以将它们推回。

  • 您可以访问底层容器(不使用派生类)。它是受保护的成员。如果您害怕强制转换和形式上未定义的行为,那么臭名昭著的 C++ 成员指针类型系统漏洞会很有帮助。

  • 您可以直接使用自定义派生类代替std::stack

此列表并不详尽,但它们是更自然的选择。

即其他方法是相当不自然的和被解释的。

【讨论】:

    猜你喜欢
    • 2012-04-26
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 2022-06-13
    • 2013-08-23
    • 2016-05-20
    相关资源
    最近更新 更多