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;