@NightCAT_Busya
pycatdranigbus

Что быстрее: создание вектора push_back или сначала объявление сколько в нем переменных, а потом заполнение?

Собственно, вопрос такой же как и в заголовке
  • Вопрос задан
  • 107 просмотров
Решения вопроса 2
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Сначала объявление будет быстрее. Тут всего одно выделение памяти, а при push_back их будет несколько (но не n, потому что vector умный и выделяет памяти с запасом).

Но push_back не на порядок медленнее. В худшем случае в пару раз. И то и другое будет работать за O(n). Если у вас программа еще хоть что-то делает, кроме запихивания чисел в массив, то вы разницу особо и не заметите.

Если только профайлер не показывает что вот это вот самое медленное место в программе, то заморачиваться не стоит.
Ответ написан
@dima20155
you don't choose c++. It chooses you
Зависит от того сколько элементов вы хотите добавить с помощью push_back, потому что если push_back резервирует дополнительное место под хранение данных, чтобы следующий push_back не выполнял длительную дополнительную аллокацию памяти. В общем случае, push_back работает медленее.

При небольшом размере вектора (0-10 элементов) и большом количестве элементов, которые необходимо вставить в вектор (напр., 500) разница более значительна, потому что алгоритм оптимизации push_back выполнит несколько аллокаций за это время. На больших же значениях (напр., размер вектора 3 элемента, а необходимо вставить 100000) разница приближается к единицам процентов (судя по моим тестам ~2-5%)
https://godbolt.org/z/9ThqYjP4o
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы