Push_back дословно
1. увеличивает размер массива (контейнера) на 1
2. записывает по последнему индексу полученное им значение.
Внутри контейнера это довольно не очевидная по сложности процедура.
Так как вектор скрывает реальный размер массива, который может быть больше чем выдает size(). В большинстве случаев он только меняет размер переменной size внутри, ограничивая зону итерации. И лишь иногда действительно увеличивает массив. Но не на 1, а с запасом, который расчитывается эвристически. Создает новый массив сразу на энное количество элементов больше старого, переписывает в него старый массив, увеличивает переменную size на 1, а real_size на N. Записывает в size-1 новый элемент. Старый массив удаляет.
В некоторых случаях данная процедура довольно затратна по времени, и приходится вмешиваться в алгоритм, например заранее задавая максимальный размер массива. Тогда вектор сразу создаст его, и не будет тратить время на пресоздания новых массивов.