Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры по Леонову, 5семестр.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
503.3 Кб
Скачать

18.Стандартная библиотека: Контейнеры

Контейнерные классы используются для хранения большого числа отдельных элементов. Типы stack , vector, список являются контейнерными классами.

Контейнеры подразделяются на два основных семейства: последовательные контейне­ры и ассоциативные контейнеры. Последовательные контейнеры включают векторы (vectors), списки (lists) и двусторонние очереди. Эти контейнеры упорядочива­ются заданием последовательности элементов. Ассоциативные контейнеры включают множества (sets), мультимножества (multisets), отображения (maps), мультиотображения (multimaps) и содержат ключи для поиска элементов. Контейнер-отображение явля­ется ассоциативным массивом. Ему необходимо, чтобы была определена операция срав­нения для хранимых элементов. Все варианты контейнеров имеют похожий интерфейс.

Интерфейсы типичных контейнеров STL

• конструкторы, включая конструкторы по умолчанию и копирующие конст­рукторы

• доступ к элементу

• вставка элемента

• удаление элемента

• деструктор

• итераторы

STL-стандартная библиотека шаблонов предоставляющая возможности обобщенного программирования для многих стандартных структур данных и алгоритмов. Тремя ее компонентами являются: контейнеры, итераторы, алгоритмы, которые поддерживают возможности обобщенного программирования.

Для выполнения перебора элементов контейнера создают итератор. Перемещение по контейнерам производится с помощью итератора. Итератор может рассматриваться как усовершенствованный тип указателей. Итератор является шаблоном, который инстанцируется типом контейнерного класса, итерируемого им. Су­ществует пять типов итераторов: ввода, вывода, прохода вперед, двусторонние и про­извольного доступа. Не все типы итераторов могут быть доступны для данного контейнерного класса. Например, итератор произвольного доступа доступен для векторов, но не для отображений. Контейнерные классы диктуют выбор категории доступного или необходимого итератора. Та, векторный контейнер допускает итераторы произвольного доступа, а список – нет. Сортировка обычно нуждается в итераторе произвольного доступа, а для поиска нужен лишь итератор ввода.

пример подход к векторному контейнеру может быть выполнен: vector<char>: :iterator

Классы адаптеров контейнеров - это контейнерные классы, которые изменяют имеющиеся контейнеры. Контейнерные адаптеры: стек, очередь, приоритетная очередь.

Недостатки: усложнился доступ к произвольному элементу.

Достоинства: упростился процесс добавления и удаления элемента.

Типичный алгоритм контейнера:

double sum(const deque<double> &dq)

{ deque<double>::const_iterator p;

double s = 0.0;

for(p = dq.begin(); p !=dq.end(); ++ p)

s + = * p;

return s;

}

Итератор р разыменовывается для получения по очереди каждого хранимого элемента.

19 Реализация устойчивости объектов средствами mfc.

Чтобы сериализовать класс, надо выполнить несколько операций.

Сериализация нужна для упаковки данных объекта в архив. Сериализация

Может применяться для хранения данных объекта на жёстком диске.

Операции для сериализации класса:

Нужно наследовать класс от Cobject

Надо переопределить функцию Serialize в этом классе, для этого

Используется Macros Declair_Serial.

Так же надо определить пустой(без параметров) конструктор в классе

И ещё один макрос Implement_Serial

Declair_Serial - пишется внутри тела класса, и в качестве параметра

указывается имя класса

Implement_Serial - Определяется вне класса и используется три параметра:

1-й параметр - <имя класса>

2-ой параметр - <имя класса от которого наследуется>

(обычно Cobject)

3-ий параметр - <int>

Для того чтобы Сериализовать объект, надо создать объект CArchive

- это объект в который записываются данные. В качестве параметра –

<имя файла в который осуществляется запсиь> и параметр на <запись или считывание>

Неявная сериализация

имя архива << имя объекта(который будет сериализироваться) – на запись

имя архива >> имя объекта(который будет сериализироваться) – на чтение