的std ::堆.pop()方法的结果存储到一个变量(Store results of std::s

2019-06-27 14:43发布

我想做到以下几点:

std::stack <int> s;
int h = 0;
s.push(2);
h = s.pop();

比如有h持有的价值2.当我试试我的方法,我得到“无法忽略,因为它应该是空值”。

这难道不是意图.pop()方法? 什么是做到这一点的最佳方法是什么?

Answer 1:

标准库容器中的单独top()pop() top()返回一个参考顶部元件和pop()移除所述顶部元件。 (类似地对于back() / pop_back()等等)。

有一个很好的理由,这种分离,并没有pop移除顶部元素,并返回它:C ++的一个指导原则是,你不付你不需要的东西。 单个函数将别无选择,只能由值,它可以是不希望的返回元件。 分离关注点使用户在如何使用数据结构中最大的灵活性。 (见注3 原有的STL文件 。)

(作为一个curiousum,你可能会注意到一个并发的容器,一个pop式的功能实际上是被迫在并行的情况下删除并自动返回前值,因为没有这样的概念,如“是上面”(或“为空”对于这个问题),这是数据结构是如何同时采取以提供他们保证一个显著的性能影响明显的例子之一。)



Answer 2:

您可以使用:

h = s.top();

那么使用(如果你想删除最近的值,否则什么都不做)后

 s.pop();

它的工作原理相同的方式!



Answer 3:

实际上,你可以使用s.top()来存储元素,然后使用弹出它

s.pop().

使用

int h=s.top();
s.pop()

代替

int h=s.pop()

你不能直接给s.pop()一些数据类型,如s.pop()从栈中删除元素,并且没有返回。



Answer 4:

S.pop()不返回任何值。 因为pop()是无效的功能。 如果你想看到堆栈的顶部,然后它会S.top() 如果您存储这个值,那么写value = S.top()



文章来源: Store results of std::stack .pop() method into a variable
标签: c++ stack