在不破坏堆栈的情况下获取c ++中stack <int>的总和

时间:2018-02-07 14:02:00

标签: c++ stl stack

获得堆栈元素总和的有效方法,无需清空或将其复制到其他堆栈? 我在做的是:

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

这可以使用https://ideone.com/i7ha2j中间化的https://stackoverflow.com/a/13428630/7267150

来完成

任何其他方式来达到要求(本例,总和)??我更喜欢STL(可能)。

2 个答案:

答案 0 :(得分:1)

你无法迭代stack所以没有一个简单的方法。您可以使用dequeue<int>stack<int>插入每个顶部元素。然后,如果必须使用堆栈,请使用另一个循环将它们重新插回到原始stack<int> si。否则,尝试切换到vector<int>以便轻松迭代。

答案 1 :(得分:0)

Stack不是这里选择的合适容器。你应该看看std::vector,然后你可以做一些这样的事情:

#include <vector>

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

选择std::vector超过std::stack的主要原因是因为更容易迭代矢量。