Иллюстрированный самоучитель по Visual Studio .NET

Стек – это несложно. Контейнеры типа 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";
}
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.