开发者

Using stack defined in C++ 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());
    }
}

Whats wrong with the code above?

Error:

In function int main(): 开发者_Go百科aggregate value used where an integer was expected


stack::pop is a void function which just discards the top element on the stack, in order to get the value you want to use stack::top.

The reason this is so is for exception safety reasons (what happens if the object returned throws an exception in its copy constructor?).


Minor nitpick, your for loop is actually encoding 11 items and not 10 like you make think from a brief look at the loop count. Consider using < 11 if you mean 11 elements to add.


You're treating pop() which is an operation to print to standard output. pop() just removes the topmost element from the stack. The most confusing thing however is your debug output.

I compiled your code fragment with the standard GNU C++ compiler which gave me:

main.cpp|12|error: invalid use of void expression

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜