Шаг 100 - Коллекции в MFC

В MFC есть три коллекции - это массивы CArray, списки CList и словари CMap. Кроме того, классы делят на созданные с помошью шаблонов или без них. Конечно на данный момент стандарт C++ требует использования шаблонов. Все коллекции порождены от CObject

Массив - упорядоченный набор объектов, каждому из которых соответствует индекс.

Список - упорядоченный неиндексированный набор элементов с виде связанного списка. В спиcке доступ может быть к первому, последнему и текущему элементу, для остальных необходимо производить поиск. Поиск проводится по указателю на последний и предыдущий элемент списка, который хранится в каждом элементе в виде указателя. Удобна для быстрого дополнения элементов.

Словарь - для доступа импользуется ключевое поле.

Есть коллекции объектов и коллекции указателей. При использовании колекции имя меняется путем добавления вставки TypedPrt, например, для CArray это CTypedPtrArray. И так далее.

Для выбора конкретной коллекции нужно учесть кучу параметров, вот некоторые логические

 УпорядоченностьИндексируемостьСкорость вставкиПоиск
СписокДаНетБыстроМедленно
МассивДаДаМедленноБыстро
СловарьДаДаБыстроБыстро

Анализ этой таблицы показывает, что не всё коту масленница. Если хотим иметь всё, то нужен словарь. Но это не всегда удобно, а дальше выбор простой, что нужно быстро искать или быстро вставлять :-))). Так что Выбор за Вами. Вот еще некоторые параметры для размышления

 Шаблоны С++Работа с архивомВстроеная диагностикаПроверка типа
МассивДаДаДаНет
СписокДаДаДаНет
СловарьДаДаДаНет

Вы скажете "Ну и что здесь такого? Они же одинаковые". Конечно, но у каждой коллекции есть специализированные разновидности на определенный тип данных. Например, для CArray

CArray
	CByteArray
	CDWordArray
	CObArray
	CPtrArray
	CStringArray
	CTypedPtrArray
	CUintArray
	CWordArray

И вот тут-то всё и начинается. Например, с архивом не может работать CPtrArray, а CByteArray может проверять типы :-))) Поэтому при выборе обязательно проверьте, а умеет ли Ваш контейнер делать то, что вы скажете ?.

Объявления коллекций находятся в заголовочном файле

#include "afxtempl.h"

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 8.02.2000