Использование стека, определенного в 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());
    }
}

Что не так с кодом выше?

Ошибка:

В функции int main(): совокупное значение, используемое там, где ожидалось целое число

3 ответа

Решение

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

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

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

Вы рассматриваете pop(), который является операцией для печати на стандартный вывод. 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();
    }
}
Другие вопросы по тегам