Информация об изменениях

Сообщение Re[5]: Копирование элементов std::vector от 03.09.2019 7:53

Изменено 03.09.2019 9:34 AlexGin

Re[5]: Копирование элементов std::vector
Здравствуйте, уважаемый SaZ, Вы писали:

SaZ>Почему? Как раз таки стандартный подход это дёрнуть reserve (если он есть), а потом через push_back набивать контейнер. Для вектора это будет самый эффективный способ.


Вот примеры стандартных способов:
https://en.cppreference.com/w/cpp/container/vector/push_back
http://www.cplusplus.com/reference/vector/vector/push_back

Как видим, никаких вызовов reserve перед выполнением push_back не требуется.
Если делаем 'reserve' — выделяется память внутри 'вектора' — это можно делать, если затем последует, например миллион push_back-ов
http://www.cplusplus.com/reference/vector/vector/reserve
https://stackoverflow.com/questions/13029299/stdvectorresize-vs-stdvectorreserve
Re[5]: Копирование элементов std::vector
Здравствуйте, уважаемый SaZ, Вы писали:

SaZ>Почему? Как раз таки стандартный подход это дёрнуть reserve (если он есть), а потом через push_back набивать контейнер. Для вектора это будет самый эффективный способ.


Вот примеры стандартных способов:
https://en.cppreference.com/w/cpp/container/vector/push_back
http://www.cplusplus.com/reference/vector/vector/push_back

Как видим, никаких вызовов reserve перед выполнением push_back не требуется.
Вектор (std::vector<...>) сам выделяет (и периодически перевыделяет) память для своего содержимого.

Если делаем 'reserve' — выделяется память внутри 'вектора' — это можно делать, если затем последует, например миллион push_back-ов
В этом случае, время на перевыделение будет сэкономлено (также не будет фактора "фрагментации_кучи").

Вот примеры:
http://www.cplusplus.com/reference/vector/vector/reserve
https://stackoverflow.com/questions/13029299/stdvectorresize-vs-stdvectorreserve