444_____________________Часть III. Современное программирование на C++

возвращают указатель .на элемент, если он найден. FirstThat находит первый элемент, удовлетворяющий заданному условию, a LastThat последний.

Использование массивов-контейнеров показано в листингах 18.2, 18.3 и 18.4.

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

Мультимножества (bags) и множества (sets) почти одинаковы за исключением того, что мультимножества могут содержать одинаковые объекты. Мультимножество — это неупорядоченное множество объектов, которые могут быть извлечены только с помощью указания конкретного объекта.

Для класса STUDENT наиболее употребительными классами являются следующие:

typedef TBagAsVector<STUDENT> STUDENTJBAG;

typedef TIBagAsVector<STUDENT> STODENT_POINTER_BAG;

*

Каждый конструктор может принимать необязательный параметр, определяющий размер мультимножества. Размер по умолчанию равен DEFAULT_BAG_SIZE, который определяется в файле resource.h в каталоге \Bc5\Include\Classlib. Размер мультимножества фиксирован и не может быть изменен. Пример определения мультимножества из 100 объектов STUDENT:

STUDENT_BAG studentBag!(100) ;

Мультимножество с размером по умолчанию, содержащее указатели на объекты STUDENT, объявляется как:

STUDENT_POINTER_BAG studentBag2 ;

Вставка объектов в мультимножество выполняется функцией-членом Add:

studentBag2.Add(new STUDENT("LisaCourey", 3.6));

Функции-члены Add, Detach, Flush, GetItemsContainer, ForEach, KasMember,

FirstThat и LastThat ведут себя так же, как и в случае массивов. (См. предыдущий раздел "Массивы").

Листинг 18.7 иллюстрирует использование контейнеров-мультимножеств для класса STUDENT, определенного в листинге 18.1 (studentl.h).

ttinclude <iostream.h>

#include <iomanip.h>

#include <classlib\bags.h>

#inciude "studentl.h"

typedef TIBagAsVector<STUDENT> STUDENT_BAG;