使用C++中定义的堆栈stl

Moe*_*oeb 5 c++ stack stl

#include <stack>
using namespace std;

int main() {
    stack<int> s;
    int i;
    for (i = 0; i <= 10; i++) {
        s.push(i);
    }
    for (i = 0; i <= 10; i++) {
        printf("%d", s.pop());
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码有什么问题?

错误:

函数int main():在预期整数时使用的聚合值

Mot*_*tti 21

stack::pop是一个void只丢弃堆栈顶部元素的函数,以获取您想要使用的值stack::top.

这样做的原因是出于异常安全原因(如果返回的对象在其复制构造函数中抛出异常会发生什么?).

  • 哦,从来没有意识到这就是原因.我一直认为这是一种清洁的设计/分离关注的事情.+1启发我.:) (3认同)
  • 根据Stroustrup(TC++ PL),实际的原因是性能:如果`pop`返回值,则必须创建一个不必要的副本(因为该值在堆栈中被连续销毁).虽然两者听起来都是合理的(并且两者都被移动语义所废弃). (3认同)
  • 此外,`pop`必须创建一个副本才能返回它.如果用户不想这样做,那么最终可能会降低性能. (2认同)