@gth-other

Какая разница в скорости между vector.resize и vector.reserve (C++)?

Допустим у нас есть такой код:
std::vector<int> vector(10000);
for (int i = 0; i < 10000; i = i + 1) vector[i] = i;

Будет ли он быстрее, чем такой код:
std::vector<int> vector;
vector.reserve(10000);
for (int i = 0; i < 10000; i = i + 1) vector.push_back(i);
  • Вопрос задан
  • 562 просмотра
Решения вопроса 2
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Если дизассемблировать, видно, что в нижнем коде есть условный оператор, который проверяет, не пора ли ресайзить массив. В верхнем коде такого нет.

Более умный оптимизатор может в конечном итоге выкинуть и эту проверку, и тогда код станет идентичным.

Итого, это теоретический вопрос вида "у кого лучше оптимизатор". На практике, у верхнего кода больше шансов стать более быстрым даже при плохой оптимизации.
Ответ написан
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Разницы нет. Так как и в первом и во втором случае самая ресурсоемкая операция выполняется один раз. Во втором случае, проверку разумеется никакой оптимизатор не выбросит, но она 1) работает за константу и 2) практически не влияет за счёт branch prediction.
Есть случаи, когда невозможно (неудобно) использовать resize, есть, когда reserve. Для 99% случаев подходы идентичны.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы