Программирование >>  Операторы преобразования типа 

1 ... 52 53 54 [ 55 ] 56 57 58 ... 239


Создание двух пустых списков list<1nt> Ustl. I1st2;

Заполнение обоих списков элементами for (int i=Q: 1<6; {

I1stl.push back(i):

list2.push frontCi);

pr1ntL1sts(listl, I1st2):

Вставка всех элементов listl перед первым элементом со значением 3 в I1st2

- findO возвращает итератор на первый элемент со значением 3 I1st2.spllce(f1ndci1st2.beginC).Iist2.end(). Позиция в приемнике 3).

listl); Источник

pr1ntL1sts(listl. I1st2);

Перемещение первого элемента в конец

l1st2.splice(list2.endC), Позиция в приемнике

I1st2. Источник

I1st2.beginO); Позиция в источнике pr1ntL1stsCl1stl, list2):

Сортировка второго списка, присваивание Ustl

и удаление дубликатов

Iist2.sort0;

Ustl = I1st2:

Iist2.un1que0:

printListsCHstl. Iist2):

Слияние двух отсортированных списков в первом списке listl.rrergeCl1st2): printListsdistl. I1st2);

Программа выводит следующий результат:

listl: 0 12 3 4 5 list2: 5 4 3 2 10

listl:

I1st2: 540123453210 Ustl;

l1st2; 401234532105



listl: QQ1122334455

I1st2; 0 12 3 4 5

l1Stl: QO0111222333444555 list2:

Множества и мультимножества

Множества и мультимножества автоматически сортируют свои элементы по некоторому критерию (см. главу 5). Они отличаются только тем, что мультимножества могут содержать дубликаты, а множества - нет (рис. 6.6).

Множество

Мультимножество


Рис. б.б. Множество и мультимножество

Чтобы использовать множество и.71и мультимножество в программе, необходимо включить в нее заголовочный файл <set>;

#include <set>

Типы множества и мультимножества определяются как шаблоны классов в пространстве имен std:

namespace std {

template <class Т.

class Compare = less<T>,

class Allocator = allocator<T> >

class set:

template <class T,

class Compare = less<T>.

class Allocator = allocator<T> > class multiset:

Элементы множества или мультимножества относятся к произвольному типу Т, поддерживающему присваивание, копирование и сравнение по критерию сорти-

В исходной версии STL множество определялось в заголовочном файле <set.h>, а мультимножество - в файле <multiset.b>.



В системах, не поддерживающих эначення по умолчанию для параметров шаблонов,

второй параметр обычно отсутствует. В системах, не поддерживающих эначепия по умолчанию для параметров шаблонов,

третий параметр обычно отсутствует.

Точнее говоря, множества и мyл]>тrмнoжecгвa обычно реализуются в виде краспо-чер-пых деревьев . Красио-черпые деревья хорошо приспособлены как для изменения количества элементов, так и для поиска. Они гарантируют, что вставка потребует ие более двух изменений внутренних ссылок, а самый длинный путь к элементу будет пе более чем вдвое длиннее самого короткого.

ровки. Необязательный второй параметр шаблона определяет критерий сортировки. По умолчанию используется критерий less. Объект функции less сортирует элементы, сравнивая их оператором < (дополнительная информация об объекте less приводится па с. 305). Необязательный третий параметр шаблона определяет модель памяти (см. главу 15). По умолчанию используется модель allocator, определенная в стандартной библиотеке С++.

Критерий сортировки должен определять строгую квазиупорядоченность (strict weak ordering ). Строгая квазиупорядочепность определяется тремя свойствами.

О Асимметричность.

□ Для оператора <: если выражение х<у истинно, то выражение у<х ложно.

□ Для предиката ор(): если выражение ор(Х/у) истинно, то выражение ор(у,х) ложно.

о Транзитивность.

□ Для оператора <: если выражения х<у и y<z истинны, то выражение x<z истинно.

□ Для предиката ор(): если выражения ор(х,у) и op(y,z) истинны, то выражение op(x,z) истинно.

о Иррефлексивность.

□ Для оператора <: выражение х<х всегда ложно.

□ Для предиката ор(); выражение ор(х,х) всегда ложно.

На основании этих свойств критерий сортировки используется также для проверки на равенство, а именно: два элемента равны, если ни один из них не меньше другого (или если ложны оба выражения ор(х,у) и ор(у,х)).

Возможности множеств и мультимножеств

Множества и мультимножества, как и все стандартизированные классы ассоциативных контейнеров, обычно реализуются в виде сбалансированного бинарного дерева (рис. 6.7). В стандарте такая реализация не указана, но она обусловлена требованиям к сложности операций над множествами и мультимножествами.

Главное достоггнство автоматической сортировки заключается в том, что бинарное дерево обеспечивает хорошие показатели при поиске Элементов с кон-



1 ... 52 53 54 [ 55 ] 56 57 58 ... 239

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика