Глава 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: