【问题标题】:get the sum of stack<int> in c++ without destroying stack在不破坏堆栈的情况下,在 C++ 中获取堆栈<int> 的总和
【发布时间】:2018-02-07 14:02:00
【问题描述】:

获取堆栈元素总和而不清空它或将其复制到其他堆栈的有效方法? 我正在做的是:

    stack<int> si;
    int sum = 0;
    stack<int> tsi(si);
    while (!tsi.empty()) {
        sum += tsi.top();
        tsi.pop();
    }

这可以使用https://ideone.com/i7ha2j midified 版本来完成:https://stackoverflow.com/a/13428630/7267150

任何其他方式来实现要求(这种情况下,总和)??我更喜欢 STL(有可能)。

【问题讨论】:

  • 你为什么用std::stack开头?只需使用std::vector
  • std::stack 只是一个 LIFO 数据结构。它不是为迭代元素而设计的。
  • 堆栈的要点是您只能访问一端。如果您需要其他东西,例如能够查看所有值,那么堆栈不是正确的数据结构。
  • 堆栈不可能。如果你想随机访问,请使用向量。

标签: c++ stl stack


【解决方案1】:

您无法遍历 stack,因此没有简单的方法。您可以使用dequeue&lt;int&gt;stack&lt;int&gt; 插入每个顶部元素。然后,如果必须使用堆栈,请使用另一个循环将它们重新插入到原始stack&lt;int&gt; si。否则,尝试切换到vector&lt;int&gt; 以方便迭代。

【讨论】:

    【解决方案2】:

    堆栈不是在这里选择的正确容器。你应该看看std::vector,然后你可以做这样的事情:

    #include <vector>
    
    std::vector< int > vec;
    int sum = 0;
    for( auto const & it : vec )
    {
      sum += it;
    }
    

    选择std::vector 而不是std::stack 的主要原因是更容易迭代向量。

    【讨论】:

      猜你喜欢
      • 2013-08-15
      • 2014-10-17
      • 1970-01-01
      • 2012-04-23
      • 2021-01-25
      • 2018-05-23
      • 1970-01-01
      • 2010-10-17
      • 2016-08-30
      相关资源
      最近更新 更多