我想做以下事情:
std::stack <int> s;
int h = 0;
s.push(2);
h = s.pop();
例如让h
保持值2.当我尝试我的方法时,我得到“无效值,因为它应该被忽略”。
这不是.pop()
方法的意图吗?这样做的首选方法是什么?
答案 0 :(得分:34)
标准库容器分开top()
和pop()
:top()
返回对顶部元素的引用,pop()
删除顶部元素。 (同样适用于back()
/ pop_back()
等。)
有一个很好的理由让这种分离,并没有pop
删除顶部元素和返回它:C ++的一个指导原则是你不支付你所做的事情不需要。单个函数别无选择,只能按值返回元素,这可能是不希望的。分离关注点为用户提供了如何使用数据结构的最大灵活性。 (参见the original STL documentation中的注释#3。)
(作为curiousum,可能会发现,对于并发容器,pop
- 样函数实际上是被迫以除去并返回最高值原子地,因为在并发上下文中,没有“在顶部”(或者就此而言是“空”)这样的概念。这是并发数据结构如何在性能上受到重大影响的明显例子之一提供他们的保证。)
答案 1 :(得分:2)
您可以使用:
h = s.top();
然后在使用之后(如果你想删除最近的值,否则什么都不做)
s.pop();
它的工作方式相同!!
答案 2 :(得分:0)
您实际上可以使用s.top()
来存储元素,然后使用
s.pop().
使用
int h=s.top();
s.pop()
代替
int h=s.pop()
您不能直接将s.pop()
分配给某种数据类型,因为s.pop()
从堆栈中删除了元素,什么也不返回。
答案 3 :(得分:-2)
S.pop()
不会返回任何值。因为pop()
是无效功能。
如果你想看到堆栈的顶部,那么它将是S.top()
。如果存储此值,请写入value = S.top()
。