Глава 18. Классы-контейнеры_________________________________495

Используя класс STUDENT из примера 18.16 как параметр шаблона, вектор из объектов STUDENT можно описать так:

typedef vector <STUDENT> STUDENT_VECTOR;

Для векторов имеется пять конструктора:

STUDENT VECTOR studentVectorl; // Конструктор по умолчанию. STUDENT_VECTOR studentVector2(10);// Вектор из 10 студентов. // Тоже вектор из 10 студентов:

STUDENT_VECTOR studentVector3(10, STUDENT("Sam Adams",0.0));

STUDENT_VECTOR studentVector4(studentVector2); // Конструктор копий STUDENT_VECTOR student Vectors(studentVector3.begin(), ^studentVector.begin()+5); // Копирование первых 5 элементов

studentVectori — пустой вектор. Размеры всех определенных выше векторов могут быть динамически изменены. studentvector2 первоначально содержит

10 Объектов STUDENT, СОЗДанНЫХ КОНСТруКТОрОМ ПО умолчанию. studentVector3

также содержит 10 объектов STUDENT, но все они — копии объекта STUDENT, переданного в конструктор, а не созданы конструктором по умолчанию.

studentVector4 — ЭТО КОПИЯ studentvector2. studentVectorS содержит 5 ЭЛе-

ментов, которые являются копиями первых 5 элементов из studentVector3. Итераторы, передаваемые в такой конструктор, могут быть только итераторами ввода. Используемый контейнер не обязан быть вектором.

Для вектора определена операция присваивания. Замена содержимого studentvector5 элементами из studentVector4 может быть выполнена так:

studentVector.5 = studentVector4;

Содержимое контейнера может меняться при помощи функции-члена assign. Функция может использоваться в следующих трех формах:

studentvector2.assign(studentVector3.begin()+5, student Vector.end());

studentVectori.assign(15) ;

StudentVector3.assign(25, STUDENT("Jack Breslin", 4.0));

Первая форма принимает два входных итератора — first и last — и копирует содержимое последовательности [first, last) в вектор. Первый оператор присваивает вектору studentvector2 последние после пятого значения вектора studentVector3. Вторая форма заменяет содержимое контейнера на заданное по умолчанию число объектов данного класса. В данном примере studentVectori по умолчанию будет содержать 15 объектов класса STUDENT. Последняя форма заменяет содержимое вектора заданным числом копий определенного объекта. В данном примере studentVector3 будет содержать 25 одинаковых объектов STUDENT с идентификатором (ID) Jack Breslin.

Ниже приведены несколько наиболее полезных типов данных, определенных для манипуляций с контейнерами STL: