堆栈结合了pop()和top()吗?

时间:2020-08-05 19:16:28

标签: c++ stack std

对于.test{ width:100% ; height: 100% ; margin: 0 auto; } .test .modal-content{ width:100% ; height: 100% ; } ,我们使用std::stack提取最后一个成员,并使用pop()获得其值。是否有任何捷径可以同时执行这两项操作(获取上一个成员的价值并将其踢出去)?

4 个答案:

答案 0 :(得分:2)

有什么捷径可同时执行这两项操作

否。

但是您可以编写一个调用两者的函数并将其用作“快捷方式”。

答案 1 :(得分:2)

没有技术原因无法做到这一点。它可以很简单地作为实用程序实现:

template <typename T>
auto pop_value(T & stack) {
    auto v = std::move(stack.top());
    stack.pop();
    return v;
}

如果使用的C ++ 11无法使用返回类型推导,请将auto替换为typename T::value_type

答案 2 :(得分:1)

top()-仅返回元素,但不删除它。 pop()-仅删除元素,但不返回任何内容。

没有这样的方法可以删除并返回删除的元素。

确保在进行顶部或弹出操作时进行空检查,因为这会导致错误。执行任何这些操作之前,请先进行空支票。

答案 3 :(得分:1)

pop()不返回弹出元素的值的原因是这样做不是异常安全的。如果返回值的副本构造函数引发异常,则该值已丢失。它已从堆栈中删除,但尚未复制。无法取回。如果您对此并不在意,则可以通过显而易见的方式编写“快捷方式”功能:复制top()对象,pop()堆栈,然后返回值。