【发布时间】:2020-11-26 00:55:59
【问题描述】:
对于std::stack,我们使用pop() 提取最后一个成员并使用top() 获取其值。是否有任何捷径可以同时执行这两个操作(获取最后一个成员的值并将其踢出)?
【问题讨论】:
-
简答,不。你必须处理空的情况(堆栈是空的)所以它并不简单
-
另见Why doesn't std::queue::pop return value.?。嗯,锤还是不锤?
-
不,在空堆栈上调用 top 或 pop 是不安全的。这样做会导致未定义的行为
-
@NathanOliver,因为无论如何它都是 UB,所以如果模仿
stack要求,您不必担心这种情况。执行auto& elem = top(); pop(); return elem;的实现将具有与top相同的UB 特征。