我想做以下事情:
std::stack <int> s;
int h = 0;
s.push(2);
h = s.pop();
Run Code Online (Sandbox Code Playgroud)
比如h保持价值2.当我尝试我的方法时,我得到"无效的价值,因为它应该是".
这不是.pop()方法的意图吗?这样做的首选方法是什么?
Ker*_* SB 37
标准库容器分开,top()并且pop():top()返回对top元素的引用,并pop()删除top元素.(同样适用于back()/ pop_back()等).
这种分离有一个很好的理由,并没有pop删除顶部元素并将其返回:C++的一个指导原则是你不需要支付你不需要的东西.单个函数别无选择,只能按值返回元素,这可能是不希望的.分离关注点为用户提供了如何使用数据结构的最大灵活性.(参见原始STL文档中的注释#3 .)
(作为一个好奇心,您可能会注意到,对于并发容器,类似pop函数实际上被强制删除并以原子方式返回顶值,因为在并发上下文中,没有"在顶部"(或"对于那个问题,这是空的.这是并发数据结构如何在提供保证方面受到重大性能影响的一个明显例子.)
小智 5
您可以使用:
h = s.top();
Run Code Online (Sandbox Code Playgroud)
然后在使用之后(如果你想删除最新的值,否则什么都不做)
s.pop();
Run Code Online (Sandbox Code Playgroud)
它的工作方式相同!!