|
http://tikitak.narod.ru ---- Главная страница сайта
Шаг 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"
Предыдущий Шаг | Оглавление By Artem.
Используются технологии uCoz
|