[БЕЗ_ЗВУКА] Здравствуйте! Меня зовут Антон Полднев. Я разрабатываю рекламную систему «Яндекса». Сейчас мы с вами поговорим подробнее о контейнерах в языке C++ и начнем с самого простого контейнера — вектора. Вектор — это просто набор элементов какого-то типа, который вы укажете в типе вектора, в угловых скобках. Классический сценарий использования вектора — это сохранение последовательности элементов. Например, давайте напишем программу, которая считает со стандартного потока ввода из консоли набор имен лекторов, например, набор каких-то строк. Я создаю вектор строк. Допустим, вот так. Сейчас я создал пустой вектор v. Видите? Я никак не указал его размер. Давайте будем считать, что нам на вход подается количество строк, которые мы будем считывать, затем — сами строки. Я сначала считаю в переменную x количество элементов. Или давайте назовем ее n, чтобы было чуть понятнее, что это именно количество. Теперь я знаю, сколько у меня элементов будет в векторе. Поэтому я могу в конструкторе вектора в круглых скобках после названия переменной указать, сколько у меня будет элементов в этом векторе. Если затем я хочу считать все элементы этого вектора по очереди, я пишу обычный цикл for, перебирая все элементы вектора по ссылке. Каждый очередной элемент s — это ссылка на очередной элемент вектора v, и поэтому я с помощью этой ссылки и переменной cin могу считать очередную строчку. Итак, я считал вектор v, теперь давайте я его выведу, чтобы посмотреть, что я всё правильно считал. Для этого, наверное, сразу напишу функцию PrintVector, которую здесь вызову от вектора v, а здесь я эту функцию напишу. Она будет возвращать void, то есть ничего, принимать вектор строк по константной ссылке. Как мы можем вывести вектор? С помощью того же самого цикла for. Я хочу перебрать все строки, которые являются элементами вектора v. Я так и пишу: string s : v. Каждый очередной элемент вектора — это string, поэтому здесь я написал string и вывожу эту строчку s, и затем — перевод строки. Итак, компилируем нашу программу. Видим много ошибок. Первая ошибка, что компилятор не видит перемены cin, поскольку мы не подключили библиотеку iostream. Подключаем. Снова компилируем. Еще одна ошибка — нет переменной v. Наверное, у нас проблема в том, что компилятор не видит названия вектора, потому что мы не подключили еще одну библиотеку vector. Действительно, чтобы использовать вектор, нужно подключить библиотеку vector. Компилируем еще раз. Наконец-то у нас все компилируется. Запускаем [БЕЗ_ЗВУКА] и вводим сначала количество строк, например, две и, например, какие-то имена лекторов, скажем, Антон и Илья. Видим, что у нас вывелись Антон и Илья — те самые элементы вектора. Значит, мы успешно считали вектор и успешно вывели его элементы. Как еще можно было бы считать вектор? Здесь мы явно указали, что вектор будет иметь размер n. Можно было бы поступить по-другому. Можно было бы создать пустой вектор, а затем поочередно с помощью цикла while дописывать новые элементы, новые строчки в конец вектора v. Как мы это сделаем? У нас будет переменная i, которая будет означать номер шага, и затем, пока переменная i < n, мы будем создавать какую-то локальную строчку, в нее считывать очередное значение, дописывать это значение в конец вектора v с помощью метода push_back и затем увеличивать значение переменной i на 1. Давайте попробуем скомпилировать такой код. Код успешно скомпилировался. Запускаем. Вводим две строки, и они успешно вывелись. Итак, как можно считать вектор, если это у вас просто набор элементов? Первый способ — это создать вектор заранее нужного размера, если вы его знаете, и затем поочередно записать нужные вам значения в нулевую ячейку, в первую и так далее с помощью цикла. Второй способ — это создать вектор пустым. Вот так вот и затем пройтись циклом от нуля до в данном случае n − 1. И считывая очередное значение в некоторую локальную переменную, добавлять ее в вектор с помощью метода push_back. Хорошо. Давайте покажем, что размер вектора меняется. Например, я могу выводить размер, текущий размер вектора на каждой итерации. Напишу, что текущий размер равен... Как узнать размер вектора? Вызвать метод size, который не принимает никаких аргументов. Давайте я этот код скомпилирую, запущу и введу какие-нибудь две строки. После первой строки у меня текущий размер вектора 1, после второй — текущий размер вектора 2. Если же я использовал предыдущий способ: заранее указал размер вектора и затем считывал все его элементы с помощью цикла for, давайте я его снова повторю и снова выведу текущий размер вектора. [БЕЗ_ЗВУКА] Сейчас я должен увидеть, что размер вектора постоянный. Я компилирую код. Запускаю. Ввожу какие-то две строки и вижу, что текущий размер вектора всегда 2. Итак, действительно, в первом случае, вот в этом, я создал вектор готового размера, конкретного размера и затем его не менял. Во втором случае я создал пустой вектор, а затем в него дописывал элементы.