我想做以下事情:
std::stack <int> s;
int h = 0;
s.push(2);
h = s.pop();
比如有h
保持值 2。当我尝试我的方法时,我得到“无效值没有被忽略,因为它应该是”。
这难道不是本意吗.pop()
方法?执行此操作的首选方法是什么?
标准库容器是分开的top()
and pop()
: top()
返回对顶部元素的引用,并且pop()
删除顶部元素。 (同样对于back()
/pop_back()
etc.).
这种分离有充分的理由,但没有pop
删除顶部元素and返回:C++ 的一项指导原则是您不必为不需要的东西付费。单个函数别无选择,只能按值返回元素,这可能是不希望的。分离关注点为用户提供了如何使用数据结构的最大灵活性。 (参见注释#3原始STL文档 http://www.sgi.com/tech/stl/stack.html.)
(出于好奇,您可能会注意到,对于同时容器,一个pop
-like 函数实际上是forced以原子方式删除并返回顶部值,因为在并发上下文中,不存在“位于顶部”(或“为空”)这样的概念。这是并发数据结构如何为了提供保证而对性能造成重大影响的明显例子之一。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)