В основном нет. Элементы в векторе по умолчанию создаются при изменении размера (для целого числа это приводит к 0).
Предполагая, что вы используете Reserve (), чтобы гарантировать, что resize () не выделяет память, я не стал бы беспокоиться об этом, если в дальнейшем это не скажется на производительности.
Если вас это беспокоит, вы можете рассмотреть возможность использования обычного массива и сохранения количества элементов в отдельной переменной. Это даст вам лучшую производительность.
Обновление:
Джон спросил:
Действительно ли гарантирован конструктор
обнулить эту память? я думал так
был неопределен?
Да и нет. Примитивные типы (int, bool, float и т. Д.) Имеют конструкторы по умолчанию, которые инициализируют их нулем. Однако, в отличие от обычных классов или структур, компилятор не вызывает их автоматически.
1019 * например *
int a; // uninitialized
int b = int(); // initialized to 0
Поскольку vector :: resize использует последнюю форму при добавлении элементов, вам гарантируется, что созданные элементы будут правильно инициализированы нулем. Это верно для всех коллекций STL, которые неявно создают элементы.