c++ - pinturas - lili elbe libro pdf
Control sobre la reasignaciĆ³n de std:: vector (1)
Al leer la referencia std::vector
entendí que
La
insert
llamada cuando se alcanza la capacidad máxima causará la reasignación delstd::vector
(causando la invalidación del iterador) porque se le asigna una memoria más grande con una capacidad mayor. El objetivo es mantener la garantía sobre los datos contiguos.Mientras me quede por debajo de la capacidad máxima,
insert
no causará eso (y los iteradores estarán intactos).
Mi pregunta es la siguiente:
Cuando se llama automáticamente a la reserve
por insert
, ¿hay alguna manera de controlar la cantidad de memoria nueva que se debe reservar?
Supongamos que tengo un vector con una capacidad inicial de 100 y, cuando se alcanza la capacidad máxima, quiero asignar 20 bytes adicionales.
¿Es posible hacer eso?
Siempre puede rastrearlo usted mismo y llamar a reserva antes de asignar, por ejemplo
static const int N = 20 // Amount to grow by
if (vec.capacity() == vec.size()) {
vec.reserve(vec.size() + N);
}
vec.insert(...);
Puede ajustar esto en una función propia y llamar a esa función en lugar de llamar a insert()
directamente.