Глава 18. Классы-контейнеры_________________________________443
studentArray3.Detach(&s); // удаляет заданный элемент // без его уничтожения
Для косвенных массивов Detach может принимать необязательный параметр типа TShouldDelete: :DeleteType, который определяет необходимость уничтожения элемента:
studentArray3.Detach(10,TshouldDelete::NoDelete); // по умолчанию studentArray3.Detach(10,TshouldDelete::Delete); // удаление объекта studentArray3.Detach(10,TshouldDelete::DefDelete); // удаление объекта
//в зависимости от его // принадлежности
Последний оператор удалит объект, только если контейнер является обладателем данного объекта. (См. раздел "Принадлежность контейнеров").
Функция Flush удаляет все элементы из массива. Для косвенного массива необязательный параметр TshouldDelete:: DeleteType определяет уничтожение объектов:
studentArray3.Flush(); // Объект уничтожается, если принадлежит // контейнеру.
Предыдущий оператор может быть записан в виде:
studentArray3.Flush(TShouldDelete::DefDelete) ;
TshouldDelete: :NoDelete определяет, что объект не будет уничтожен, а TShouldDelete:: Delete — что объект будет уничтожен независимо от его принадлежности.
Функция ArraySize возвращает число элементов, размещенных в массиве, т. е. его текущий размер, a GetitemsinContainer возвращает число объектов в массиве.
ForEach — это функция-итератор, которая применяет определенную пользователем функцию к каждому элементу массива. Использование такой функции было показано в листинге 18.6.
Существуют три функции, позволяющие осуществлять поиск в массиве. HasMember ищет указанный элемент и возвращает TRUE, если он найден. Наличие студента по имени John Newton в массиве STUDENT можно выяснить так:
STUDENT s("JohnNewton");
if (studentArray3.HasMember(&s))
Две похожие функции — FirstThat и LastThat осуществляют поиск в массиве в соответствии с условием, определяемым пользовательской функцией, и