Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
38
Добавлен:
16.04.2013
Размер:
198.14 Кб
Скачать

Члены последовательных контейнеров stl

SEQ::SEQ(n, v) n элементов со значением v

SEQ: : SEQ (b_it, e_it) от b_it до e_it - 1

с . insert (w_it, v) вставка v nepenw_it

с . insert (w_it, v, п) вставка п копий v nepenw_it

с . insert (w_it, b_it, e_it) вставка значений от b_it

до e_it перед w_it

с . erase (w_it) стирает элемент,

«прописанный» Bw_it

с . erase (b_it, e_it) стирает от b_it Aoe_it

Вот некоторые примеры использования этих членов:

double w [6] = (1.1, 1.2, 2.2, 2.3, 3.3, 4.4);

vector<double> v(15, 1.5); //15 элементов со значением 1.5

deque<double> d(w + 2, w + 6); //использует от 2.2 до 4.4

d.erase(d.begin() + 2); //стирает 3-ий элемент

v.insert(v.begin () + 1, w[3]); //вставляет w[3]

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

Ассоциативные контейнеры — это множества, отображения, мультимножества и мультиотображения. Они содержат доступные по ключу элементы и упорядочиваю­щее отношение Compare, являющееся сравнивающим объектом ассоциативного контейнера.

Это стандартная идиома прохода при использовании контейнеров и итераторов. За­метьте, что d. end () используется для выхода из цикла, поскольку является значе­нием итератора «конец контейнера». Обратите также внимание, что автоинкремент ++ имеет семантику указателя, продвигая итератор к следующей позиции в контей­нере. Разыменование работает аналогично семантике указателей.

• d. insert (d.begin (), v.begin(), v.end());

Функция-член insert () помещает диапазон значений итератора от v. begin () до v. end () (исключая само v. end () ) начиная с позиции d. beg in ().

• for (p = d.begin(); p i= d.end(); p++)

cout << *p << ' \t ' ; //печать: 6 6 6 6 6 6 8 7 6 5

Вследствие вставки пяти новых элементов со значением 6 в начало двусторонней очереди d, теперь цикл прохода для d выведет 10 элементов, что и показано в ком­ментарии.

В следующей таблице последовательные классы обозначены как SEQ. Имейте в виду, что приведенные ниже возможности дополняют уже описанный интерфейс любого CAN.

Члены последовательных контейнеров stl

SEQ::SEQ(n, v) n элементов со значением v

SEQ: : SEQ (b_it, e_it) от b_it до e_it - 1

с . insert (w_it, v) вставка v nepenw_it

с . insert (w_it, v, п) вставка п копий v nepenw_it

с . insert (w_it, b_it, e_it) вставка значений от b_it

до e_it перед w_it

с . erase (w_it) стирает элемент,

«прописанный» Bw_it

с . erase (b_it, e_it) стирает от b_it Aoe_it

Вот некоторые примеры использования этих членов:

double w [6] = (1.1, 1.2, 2.2, 2.3, 3.3, 4.4);

vector<double> v(15, 1.5); //15 элементов со значением 1.5

deque<double> d(w + 2, w + 6); //использует от 2.2 до 4.4

d.erase(d.begin() + 2); //стирает 3-ий элемент

v.insert(v.begin () + 1, w[3]); //вставляет w[3]

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

Ассоциативные контейнеры — это множества, отображения, мультимножества и мультиотображения. Они содержат доступные по ключу элементы и упорядочиваю­щее отношение Compare, являющееся сравнивающим объектом ассоциативного контейнера.

В файле stl_age.cpp

//Ассоциативные контейнеры — поиск возраста

#include <iostream>

#include <map>

#include <string>

using namespace std;

int main()

{

map<string, int, less<string> > name_age; //имя и возраст

name_age [ "Пол, Лаура"] =7; :

name_age["Долсберри,Бетти"] = 39;

name_age["Пол,Таня"] = 14;

cout << "Лауре "<< name_age["Пол,Лаура"] << " лет." « endl;

}

Отображение name_age — это ассоциативный массив, в котором ключом является тип string. Объект Compare — это less<string>.

В следующей таблице, описывающей интерфейс ассоциативных классов, они обозначены как ASSOC. Имейте в виду, что приведенные ниже возможности дополняют уже описанный интерфейс любого CAN.

Определения ассоциативных контейнеров STL

ASSOC : : key_type тип ключа поиска

ASSOC :: key_compare тип сравнивающего объекта

ASSOC:: value_compare тип для сравнения

ASSOC::value_type

Инициализация ассоциативных контейнеров обеспечивается несколькими стандарт­ными конструкторами.

Ассоциативные конструкторы STL

assoc () конструктор по умолчанию,

используется Compare

ASSOC (cmp) конструктор, использующий стр

как сравнивающий объект

ASSOC (b_it, e_it) использует элементы в диапазоне

от b_it до e_it применяется Compare

ASSOC (b_it, e_it, cmp) использует элементы в диапазоне

от b_it до е_it и cmp как

сравненивающий объект

Что отличает эти конструкторы от конструкторов последовательных контейнер так это использование.

STL: функции-члены вставки и удаления

с . insert (t) если ни один из существующих элементов не имеет такого же ключа, как t, вставляет t;

возвращает пару <iterator, bool> с bool, имеющим значение true, если t отсутствовал

с . insert (w_it, t) вставляет t с w_it в качестве ; начальной позиции поиска; терпит неудачу в множествах

и отображениях, если ключевое значение уже. присутствует;

возвращает позицию вставки

с . insert (b_it, e_it) вставляет диапазон элементов

с . erase (k) стирает элементы, ключевое значение которых равно k, возвращая количество стертых элементов

с . erase (w_it) стирает указываемый элемент с . erase (b_it, e_it) стирает диапазон элементов

Вставка выполняется, если ни один из элементов с таким же ключом еще не присут­ствует. Вот некоторые примеры использования этих членов:

int т[4]={1,2,3,4};

set<int, less<int> > s //множество целых,

//упорядоченное

//с помощью less

se't<int, less<int> > t(m, m + 4); //используется 1, 2, 3, 4

s.insert(3); //помешает 3 в множество s

t.insert (3); //не вставляется, так как

//в множестве t уже есть 3

s.erase(2); //в s нет такого элемента

t.erase(4); //t теперь содержит 1, 2, 3

Дополнительные функции-члены можно найти в разделе E.I.2, «Ассоциативные контейнеры», на стр. 423.

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

Классы адаптеров контейнеров (container adaptors) — это контейнерные классы, кото­рые изменяют имеющиеся контейнеры с тем, чтобы обеспечить иное открытое поведе­ние на основе существующей реализации. Три предлагаемых адаптераконтейнеров — это stack (стек), queue (очередь) и priority_queue (приоритетная очередь).

Стек может быть получен (адаптирован) из вектора, списка и двусторонней очереди. Он нуждается в реализации, поддерживающей операции push, pop и tор.

Соседние файлы в папке Тельминов (мб)