获得堆栈元素总和的有效方法,无需清空或将其复制到其他堆栈? 我在做的是:
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(可能)。
答案 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
的主要原因是因为更容易迭代矢量。