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

时间:2010-04-11 11:03:42

标签: c++ stl stack

#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());
    }
}

上面的代码有什么问题?

错误:

  

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

3 个答案:

答案 0 :(得分:21)

stack::popvoid函数,它只丢弃堆栈中的顶部元素,以获取您要使用的值stack::top

这是exception safety reasons的原因(如果返回的对象在其复制构造函数中抛出异常,会发生什么?)。

答案 1 :(得分:2)

轻微的挑剔,你的for循环实际上编码了11个项目而不是10个,就像你从简短的循环计数一样思考。考虑使用&lt; 11如果你的意思是要添加11个元素。

答案 2 :(得分:1)

您正在处理pop(),这是一种打印到标准输出的操作。流行() 只是从堆栈中删除最顶层的元素。然而,最令人困惑的事情 是你的调试输出。

我用标准的GNU C ++编译器编译了你的代码片段 这给了我:

  

main.cpp | 12 |错误:无效使用void表达式

int main() {
    stack<int> s;
    int i;
    for (i = 0; i <= 10; i++) {
        s.push(i);
    }
    for (i = 0; i <= 10; i++) {
          printf("%i", s.top());
          s.pop();
    }
}