Даже если вы вызываете reserve
, вы все равно должны вызвать resize
для вектора, если вы хотите получить доступ к новым элементам, в противном случае поведение вашего кода будет undefined . То, что reserve
может сделать, это сделать push_back
и другие подобные операции более эффективными.
Лично я не буду беспокоиться о таких оптимизациях, если вы не докажете, что они оказывают влияние на соответствующий инструмент профилирования. Чаще всего тратить время на std::vector
бессмысленно.
Также использование memcpy
опасно. (Конструкторы копирования не будут вызываться, например, знание точного поведения копирования отступов в структурах с memcpy
, например, является верным способом повысить вашу репутацию на этом сайте!) Вместо этого используйте insert
и доверьте компилятору оптимизацию при необходимости.
Без явного дополнительного параметра std :: vector :: resize value-инициализирует любые дополнительные члены. Неформально это означает, что элементы, скажем, std::vector
из T
установлены на значения так же, как t
в static T t;
.