Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прикладное программирование.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
439.97 Кб
Скачать

3.5.2. Стек stack

Стек stack -- это адаптер очереди, который организует ее работу по особому правилу: "last in -- first out" (LIFO). Элемент, который был добавлен последним (push) будет извлечен первым (pop). stack не предоставляет функция для получения итераторов и их перебора. Можно лишь проверить, какой элемент находится на вершине стека (top).

Например:

/////////////////////////////////////////////////////////////////////////////

// Прикладное программирование

// Пример 3.6. Пример работы с контейнером stack

//

// Кафедра Прикладной и компьютерной оптики, http://aco.ifmo.ru

// СПб НИУ ИТМО

/////////////////////////////////////////////////////////////////////////////

#include <iostream> // подключение библиотеки ввода-вывода

#include <stack> // подключение описания stack

using namespace std; // подключение стандартного пространства имен для использования библиотек

/////////////////////////////////////////////////////////////////////////////

void main()

{

stack<int> s; // объявление контейнера

// добавление в контейнер новых элементов

s.push(8); // s = 8

s.push(7); // s = 7 8

s.push(4); // s = 4 7 8

cout<<s.top()<<endl; // вывод на экран "верхнего" элемента (4)

s.pop(); // удаление из контейнера "верхнего" элемента

cout<<s.top()<<endl; // вывод на экран "верхнего" элемента (7)

s.pop(); // удаление из контейнера "верхнего" элемента

cout<<s.top()<<endl; // вывод на экран "верхнего" элемента (8)

s.pop(); // удаление из контейнера "верхнего" элемента

}

/////////////////////////////////////////////////////////////////////////////

3.5.3. Очередь queue

Очередь queue -- это адаптер очереди, который организует ее работу по особому правилу: "first in first out" (FIFO). Элемент, который был добавлен последним (push) будет извлечен последним (pop). queue не предоставляет функция для получения итераторов и их перебора. Можно лишь проверить, какой элемент стоит в очереди первым (front).

Изменим предыдущий пример с использование queue:

queue<int> q; // объявление контейнера

// добавление в контейнер новых элементов

q.push(8); // q = 8

q.push(7); // q = 7 8

q.push(4); // q = 4 7 8

cout<<q.front()<<endl; // вывод на экран "переднего" элемента (8)

q.pop(); // удаление из контейнера "переднего" элемента

cout<<q.front()<<endl; // вывод на экран "переднего" элемента (7)

q.pop(); // удаление из контейнера "переднего" элемента

cout<<q.front()<<endl; // вывод на экран "переднего" элемента (4)

3.6. Ассоциативные контейнеры

Все рассмотренные нами контейнеры эффективны для хранения элементов, включения и удаления элементов, преобразования порядка следования. Но они не эффективны для поиска. Для поиска нужного элемента следует перебрать все элементы хранящиеся в нем. Чтобы этого избежать нужно хранить элементы в контейнеры упорядочено.

Ассоциативный массив - это один из самых полезных и универсальных контейнеров, который используется для хранения связанных пар "ключ-значение" ("key-value"). Таким образом, ассоциативный массив - это массив, в котором индекс может быть любого, не только целочисленного типа. Ассоциативный массив называют часто отображением или картой (map), или словарем (dictionary). В библиотеке STL реализованы следующие ассоциативные контейнеры:

  • map - ассоциативный массив, по ключу в контейнере хранится одно значение

  • multimap - ассоциативный массив с повторяющимися ключами

  • set - массив уникальных ключей без значений

  • multiset - массив с повторяющимися ключами без значений