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

указателей STUDENT с возможностью добавления кратного 5 числа элементов выглядит следующим образом:

STUDENT_POINTER_ARRAY studentArray3(99, 0, 5);

Для добавления элементов в массив существуют две функции. Функция Add вставляет элемент на первую доступную позицию:

studentArray3.Add(new STUDENT ("JohnNewton", 3.5));

Для добавления элемента в определенное место в массиве служит функция AddAt. Для добавления элемента на 9 место необходимо написать:

studentArray3.AddAtfnew STUDENT ("DeanBrown", 2.3), 10);

Функция AddAt недоступна для сортируемых контейнеров. Порядок элементов в них определяется путем сравнения.

Удаление объектов из массива выполняется с помощью функций-членов Destroy и Detach. Когда элемент удаляется из массива, все элементы с большими индексами сдвигаются. Для удаления и уничтожения элемента, связанного со студентом с индексом 10, используем функцию Destroy следующим образом:

studentArray3.Destroy(10);

При этом 11 элемент сдвинулся на 10 место, 12 — на 11 и т. д. Удалить и уничтожить элемент, связанный со студентом по имени DeanBrown, можно следующим образом:

STUDENT s("DeanBrown") ;

studentArray3.Destroy(&s) ;

Напомним, что операция эквивалентности == для класса STUDENT определена через равенство значений идентификаторов (ID).

Замечание

Функции-члены прямых контейнеров требуют передачи элементов по ссылке, а в случае косвенных контейнеров передаются указатели на элемент. Поскольку studentArray3 — косвенный контейнер, функции Destroy передается адрес объекта STUDENT (&s). Для конструктора studentArrayl должна использоваться передача по ссылке:

studentArray.Destroy(s);

Эта разница в передаче параметров в функции-члены действительна не только для массивов, но и для других контейнеров.

Функция Detach удаляет элемент, не уничтожая его:

studentArraуЗ.Detach(10); // удаляет 10-й элемент, не уничтожая его STUDENT s("DeanBrown");