При определении вектора для его элементов можно также предоставить исходное значение (или значения). Например, можно скопировать элементы из другого вектора. При копировании векторов каждый элемент нового вектора будет копией соответствующего элемента исходного. Оба вектора должны иметь тот же тип:
vector<int> ivec; // первоначально пустой
// присвоить ivec несколько значений
vector<int> ivec2(ivec); // копировать элементы ivec в ivec2
vector<int> ivec3 = ivec; // копировать элементы ivec в ivec3
vector<string> svec(ivec2); // svec содержит строки,
// а не целые числа
Согласно новому стандарту, еще одним способом предоставления значений элементам вектора является списочная инициализация (см. раздел 2.2.1), т.е. заключенный в фигурные скобки список любого количества начальных значений элементов:
vector<string> articles = {"a", "an", "the"};
В результате у вектора будет три элемента: первый со значением "а", второй — "an", последний — "the".
Как уже упоминалось, язык С++ предоставляет несколько форм инициализации (см. раздел 2.2.1). Во многих, но не во всех случаях эти формы инициализации можно использовать взаимозаменяемо. На настоящий момент приводились примеры двух форм инициализации: инициализация копией (с использованием знака =) (см. раздел 3.2.1), когда предоставляется только один инициализатор; и внутриклассовая инициализация (см. раздел 2.6.1). Третий способ подразумевает предоставление списка значений элементов, заключенных в фигурные скобки (списочная инициализация). Нельзя предоставить список инициализаторов, используя круглые скобки.
vector<string> v1{"a", "an", "the"}; // списочная инициализация
vector<string> v2("a", "an", "the"); // ошибка
Вектор можно также инициализировать набором из определенного количества элементов, обладающих указанным значением. Счетчик задает количество элементов, а за ним следует исходное значение для каждого из этих элементов.
vector<int> ivec(10, -1); // десять элементов типа int, каждый из
// которых инициализирован значением -1
vector<string> svec(10, "hi!"); // десять строк, инициализированных
// значением "hi!"
Иногда инициализирующее значение можно пропустить и указать только размер. В этом случае произойдет инициализация значения (value initialization), т.е. библиотека создаст инициализатор элемента сама. Это созданное библиотекой значение используется для инициализации каждого элемента в контейнере. Значение инициализатора элемента вектора зависит от типа его элементов.
Если вектор хранит элементы встроенного типа, такие как int, то инициализатором элемента будет значение 0. Если элементы имеют тип класса, такой как string, то инициализатором элемента будет его значение по умолчанию.
vector<int> ivec(10); // десять элементов, инициализированных
// значением 0
vector<string> svec(10); // десять элементов, инициализированных