Использование стека, определенного в C ++ stl - PullRequest
5 голосов
/ 11 апреля 2010
#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 ]

21 голосов
/ 11 апреля 2010

stack::pop - это функция void, которая просто отбрасывает верхний элемент в стеке, чтобы получить значение, которое вы хотите использовать stack::top.

Причина этого - из соображений безопасности исключений (что произойдет, если возвращенный объект вызовет исключение в своем конструкторе копирования?).

2 голосов
/ 11 апреля 2010

Незначительный придирка, ваш цикл for на самом деле кодирует 11 элементов, а не 10, как вы думаете из краткого взгляда на количество циклов. Попробуйте добавить <11, если хотите добавить 11 элементов. </p>

1 голос
/ 11 апреля 2010

Вы обрабатываете pop (), который является операцией для печати на стандартный вывод. поп () просто удаляет самый верхний элемент из стека. Однако самое запутанное ваш отладочный вывод.

Я скомпилировал ваш фрагмент кода с помощью стандартного компилятора GNU C ++ который дал мне:

main.cpp | 12 | ошибка: недопустимое использование пустого выражения

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