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