Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lucik_op.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
2.88 Mб
Скачать

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

Контейнерный класс map используется для обеспечения быстрого сохранения и доступа к уникальным ключам и соответствующих значений. При этом между ними устанавливается взаимно однозначное соответствие. Попытка поместить в контейнер map дубликат ключа игнорируется без идентификации ошибки. Контейнер map поддерживает двунаправленные итераторы. Работа с контейнером map может быть продемонстрирована на предыдущем примере, если в нем строку

typedef std::multimap<T1,T2,std::less<T1> > MUL_MAP;

заменить на строку

typedef std:map<T1,T2,std::less<T1> > MUL_MAP;

что приведет далее к созданию и работе с объектами класса map.

Адаптеры контейнеров

В состав STL входят три адаптера контейнеров – stack, queue и priority_queue. Адаптеры не предоставляют реализации фундаментальной структуры данных и не поддерживают работу с итераторами. Это отличает их от контейнеров первого класса. Преимущество класса адаптеров состоит в возможности выбирать требуемую базовую структуру данных. Все три класса адаптеров содержат компоненты-функции push и pop, реализуемые посредством вызова соответствующих функций базового класса.

Адаптеры stack

Класс stack обеспечивает возможность вставки и удаления данных в базовой структуре с одной стороны. Адаптер stack может быть реализован с любым из контейнеров последовательностей: vector, list и deque (по умолчанию реализуется с контейнером deque). Для класса stack определены следующие операции (реализуемые через соответствующие функции базового контейнера): push – помещение элемента на вершину стека, pop – удаление элемента с вершины стека, top – получение ссылки на вершину стека, empty – проверки на пустоту стека и size – получение числа элементов стека.

#include <iostream>

using std::cout;

using std::endl;

#include <stack>

#include <vector>

#include <list>

typedef char T;

template<class E>

void popElement(E &e)

{ while(!e.empty()) // пока стек не пустой

{ cout<<e.top()<<' '; // получение значения элемента на вершине стека

e.pop(); // удаление элемента с вершины стека

}

}

main()

{ std::stack <T> deque_st; // стек на основе deque

std::stack <T, std::vector<T> > vect_st; // стек на основе vector

std::stack <T, std::list<T> > list_st; // стек на основе list

char c='a';

for(int i=0;i<5;i++) // занесение в стеки

{ deque_st.push(c++);

vect_st.push(c++);

list_st.push(c++);

}

cout << "\nСтек deque :";

popElement(deque_st);

cout << "\nСтек vector :";

popElement(vect_st);

cout << "\nСтек list :";

popElement(list_st);

cout<<endl;

return 0;

}

Результат работы программы:

Стек deque : m j g d a

Стек vector : n k h e b

Стек list : o l i f c

В первых трех строках функции main создаются три стека для хранения символов, использующие в качестве базовых структур контейнеры deque (по умолчанию), vector и list соответственно. Далее в программе использована функция push для помещения элементов на вершину соответствующего стека.

Реализованная в программе template функция выводит на экран удаляемый с вершины стека элемент. Для этого использованы функции top – нахождения (но не удаления) элемента на вершине стека и pop – удаления его с вершины стека.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]