wegener pinturas lili libro gerda elbe diario c++ stl insert stdvector

c++ - pinturas - lili elbe libro pdf



Control sobre la reasignaciĆ³n de std:: vector (1)

Al leer la referencia std::vector entendí que

  1. La insert llamada cuando se alcanza la capacidad máxima causará la reasignación del std::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.

  2. 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.