Используя стек, определенный в 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(): итоговое значение использовало, где целое число ожидалось

5
задан Motti 11 April 2010 в 20:28
поделиться

3 ответа

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

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

21
ответ дан 18 December 2019 в 06:34
поделиться

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

2
ответ дан 18 December 2019 в 06:34
поделиться

Вы обрабатываете pop (), который является операцией для вывода на стандартный вывод. 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();
    }
}
1
ответ дан 18 December 2019 в 06:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: