Подтвердить что ты не робот

Как установить начальный размер std::vector?

У меня есть vector<CustomClass*>, и я помещаю много элементов в вектор, и мне нужен быстрый доступ, поэтому я не использую список. Как установить начальный размер вектора (например, должно быть 20 000 мест, чтобы избежать копирования при вставке нового)?

4b9b3361

Ответ 1

std::vector<CustomClass *> whatever(20000);

или

std::vector<CustomClass *> whatever;
whatever.reserve(20000);

Первый устанавливает фактический размер массива - т.е. делает его вектором 20000 указателей. Последний оставляет вектор пустым, но оставляет пространство для 20000 указателей, поэтому вы можете вставить (до) много, без необходимости перераспределения.

Вероятно, вам следует знать, что шансы на то, что это действительно реально, минимальны.

Ответ 2

Вам нужно использовать функцию резервирования для установки начального выделенного размера или сделать это в исходном конструкторе.

vector<CustomClass *> content(20000);

или

vector<CustomClass *> content;
...
content.reserve(20000);

Когда вы reserve() элементы, vector выделит достаточно места для (по крайней мере?), что многие элементы. Элементы не существуют в vector, но память готова к использованию. Это, возможно, ускорит push_back(), поскольку память уже выделена.