Сохранять результаты метода std:: stack.pop() в переменной - программирование

Сохранять результаты метода std:: stack.pop() в переменной

Я хотел бы сделать следующее:

std::stack <int> s;
int h = 0;
s.push(2);
h = s.pop();

Чтобы иметь h, удерживайте значение 2. Когда я пытаюсь выполнить свой метод, я получаю "значение void, которое не игнорируется, как должно быть".

Это не намерение метода .pop(). Каков предпочтительный способ сделать это?

4b9b3361

Ответ 1

Стандартные библиотеки-контейнеры разделяют top() и pop(): top() возвращает ссылку на верхний элемент, а pop() удаляет верхний элемент. (И аналогично для back()/pop_back() и т.д.).

Там есть веская причина для этого разделения и не иметь pop удалить верхний элемент и вернуть его: Один из принципов С++ заключается в том, что вы не платите за то, что вам не нужно. У единственной функции не будет выбора, кроме как вернуть элемент по значению, что может быть нежелательным. Разделение проблем дает пользователю максимальную гибкость в использовании структуры данных. (См. Примечание № 3 в оригинальной документации STL.)

(Как любопытство, вы можете заметить, что для параллельного контейнера функция pop -like фактически вынуждена удалять и возвращать верхнее значение атомарно, поскольку в параллельном контексте нет такого понятия, как "бытие" (или "быть пустым" ). Это один из очевидных примеров того, как параллельные структуры данных имеют значительный успех, чтобы обеспечить их гарантии.)

Ответ 2

Вы можете использовать:

h = s.top();

затем после этого использования (если вы хотите удалить последнее значение в противном случае ничего не делать)

 s.pop();

Это работает так же!

Ответ 3

S.pop() не возвращает никакого значения. Потому что pop() является функцией void. Если вы хотите увидеть верхнюю часть стека, это будет S.top(). Если вы сохраните это значение, напишите value = S.top().