Ответ 1
Стандартные библиотеки-контейнеры разделяют top()
и pop()
: top()
возвращает ссылку на верхний элемент, а pop()
удаляет верхний элемент. (И аналогично для back()
/pop_back()
и т.д.).
Там есть веская причина для этого разделения и не иметь pop
удалить верхний элемент и вернуть его: Один из принципов С++ заключается в том, что вы не платите за то, что вам не нужно. У единственной функции не будет выбора, кроме как вернуть элемент по значению, что может быть нежелательным. Разделение проблем дает пользователю максимальную гибкость в использовании структуры данных. (См. Примечание № 3 в оригинальной документации STL.)
(Как любопытство, вы можете заметить, что для параллельного контейнера функция pop
-like фактически вынуждена удалять и возвращать верхнее значение атомарно, поскольку в параллельном контексте нет такого понятия, как "бытие" (или "быть пустым" ). Это один из очевидных примеров того, как параллельные структуры данных имеют значительный успех, чтобы обеспечить их гарантии.)