Объектно-ориентированное программирование на c++


В структуре данных стек данные организованы по принципу: последний вошел в стек - первый вышел из стека, то есть LIFO (last in, first out)


Download 56.06 Kb.
bet4/8
Sana18.06.2023
Hajmi56.06 Kb.
#1592783
TuriЛекция
1   2   3   4   5   6   7   8

В структуре данных стек данные организованы по принципу: последний вошел в стек - первый вышел из стека, то есть LIFO (last in, first out).

  • В структуре данных стек данные организованы по принципу: последний вошел в стек - первый вышел из стека, то есть LIFO (last in, first out).
  • Обычно методы контейнера стек получают названия push, pop, top.
  • Чтобы построить в C++ из списка стек, достаточно использовать методы либо push_front, pop_front, front, либо push_back, pop_back, back соответственно для методов стека push, pop, top.
  • Для этого просто в реализации данных методов стека следует вызывать соответствующие методы контейнера std::list или другого подходящего контейнера.
  • Например, метод стека pop может быть реализован как вызов соответствующего метода контейнера std::list:
  • void pop() { c.pop_back(); }
  • или
  • void pop() { c.pop_front(); }
  • Поэтому нет необходимости определять управление данными контейнера стек. Всю работу по управлению данными возьмет на себя контейнер std::list. Просто его методы, фактически, переименованы для адаптации к названиям методов контейнера стек.

Т.е. стек реализован не с нуля, он просто является адаптацией класса std::list (или vector или deque) под логику работы стека, то есть стек - это адаптер контейнера.

  • Т.е. стек реализован не с нуля, он просто является адаптацией класса std::list (или vector или deque) под логику работы стека, то есть стек - это адаптер контейнера.
  • Чтобы было возможно как можно больше последовательных контейнеров адаптировать под стек, было принято соглашение ограничиться методами последовательных контейнеров push_back, pop_back, и back, так как эти методы более широко распространены среди последовательных контейнеров. Например, контейнер std::vector не имеет методов push_front и pop_front, поэтому его нельзя было использовать для моделирования методов стека, используя именно эти методы последовательных контейнеров.
  • Однако стандартный последовательный контейнер std::forward_list, который был введен в стандарт C++ позже остальных стандартных последовательных контейнеров, не имеет методов push_back, pop_back и back. Поэтому адаптер контейнеров std::stack не может адаптировать этот контейнер для реализации стека.
  • Адаптер stack теряет многие присущие базовому контейнеру методы ( например, at(), [ ] и др.), но приобретает свои собственные (push(), pop()).
  • (по материалу: https://ru.stackoverflow.com/questions/479987/Что-такое-адаптер)

Download 56.06 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling