Стек – это несложно. Контейнеры типа queue.
Стек – это адаптер (container adaptor), который предоставляет ограниченное подмножество всей функциональности контейнера. Термин адаптер в применении к структуре данных STL означает, что она реализована на основе какой-то другой структуры. По умолчанию стек основан на контейнере типа deque, но при объявлении можно явно указать и другой тип контейнера.
Стек поддерживает вставку, удаление и инспекцию элемента, расположенного в первой (top) позиции контейнера. Стек не допускает итераций прохода по своим элементам. Говорят, что стек является структурой данных с дисциплиной доступа "last in first out" (LIFO). Вверху стека расположен элемент, который был помещен в него последним. Только он и может быть выбран в настоящий момент. При отладке следующего фрагмента не забудьте вставить директиву #include <stack>:
void main() { //========= Создаем стек целых stack<Man> s; s.push(joy); s.push(joe); s.push(charlie); //========= Проверяем очевидные вещи assert (s.size () == 3); assert(s.top() == Charlie); cout << "Stack contents:\n\n"; while (s.size()) { cout << s.top() << "; "; //========= Уничтожает top-элемент s.pop(); } assert(s.empty()); }
Контейнеры типа queue
Очередь – это тоже,адаптер, который предоставляет ограниченное подмножество функциональности контейнера. Говорят, что очередь – это структура данных с дисциплиной доступа "first in first out" (FIFO). Элементы, вставляемые в конец очереди, могут быть выбраны спереди. Это означает, что метод queue::front () возвращает самый "старый" элемент, то есть тот, который был вставлен в очередь least recently – первым из тех, что еще живы.
Очередь, так же как и стек, не допускает итераций прохода по своим элементам. По умолчанию она основана на контейнере типа deque. Сравнение стека и очереди приведены в следующем фрагменте (Подключите <queue>):
void main () { //========== Массив объектов класса Man Man ar[] = { joy, mаrу, win }; uint size = sizeof (ar)/sizeof(Man); //========== Создаем с.тек объектов класса Man stack<Man> s; for (uint i=0; i<size; i++) s.push(ar[i]); cout << "Stack of Man:\n\n"; while (s.size ()) { cout << s.top() << "; "; s.pop (); } //========== Создаем очередь объектов класса Man queue<Man> q; for (i=0; Ksize; i++) q.push(ar[i]); cout << "\n\nQueue of Man:\n\n"; while (q.size ()) { cout << q.front() << "; "; q.pop(); } cout <<"\n\n"; }