У меня есть, vector<CustomClass*>
и я помещаю много элементов в вектор, и мне нужен быстрый доступ, поэтому я не использую список. Как установить начальный размер вектора (например, 20 000 разрядов, чтобы не копировать при вставке нового)?
131
std::vector
ссылке есть конструктор и две функции , в зависимости от того, что лучше соответствует вашим потребностям.std::vector
в названии?Ответы:
или:
Первый устанавливает фактический размер массива, т. Е. Делает его вектором из 20000 указателей. Последний оставляет вектор пустым, но резервирует место для 20000 указателей, поэтому вы можете вставить (до) такого количества без необходимости перераспределения.
По крайней мере, по моему опыту, это довольно необычно, чтобы любой из них имел огромное значение в производительности, но при некоторых обстоятельствах любой из них может повлиять на правильность. В частности, до тех пор, пока не происходит перераспределение, итераторы в векторе гарантированно остаются действительными, и после того, как вы установили размер / зарезервированное пространство, вам гарантировано, что перераспределения не будет, пока вы не t увеличить размер сверх этого.
источник
whatever[10000] = somepointer;
, где последний требует от васpush_back
каждого добавляемого указателя. По крайней мере, если вы привыклиvector
, последнее, вероятно, проще и естественнее.reserve
, который предварительно выделяет размер памяти. Теоретически установка размера может происходить на несколько минут быстрее, так как это также позволяет избежать увеличения текущего размера каждый раз, когда вы добавляете элемент. На самом деле я сомневаюсь, что вы сможете это измерить.Вам нужно использовать функцию резервирования, чтобы установить начальный выделенный размер или сделать это в начальном конструкторе.
или
Когда вы создаете
reserve()
элементы,vector
он выделяет достаточно места (по крайней мере?) Для такого количества элементов. Элементы не существуют вvector
, но память готова к использованию. Тогда это, возможно, ускорится,push_back()
потому что память уже выделена.источник
std::vector<Custom Class*> content(100);
)