Tengo un vector<CustomClass*>
y pongo muchos elementos en el vector y necesito un acceso rápido, por lo que no uso la lista. ¿Cómo establecer el tamaño inicial del vector (por ejemplo, 20 000 lugares, para evitar copiar cuando inserto uno nuevo)?
130
std::vector
referencia, dependiendo de cuál se adapte mejor a sus necesidades.std::vector
al título?Respuestas:
o:
El primero establece el tamaño real de la matriz, es decir, lo convierte en un vector de 20000 punteros. Este último deja el vector vacío, pero reserva espacio para 20000 punteros, por lo que puede insertar (hasta) tantos sin tener que reasignarlos.
Al menos en mi experiencia, es bastante inusual que cualquiera de estos haga una gran diferencia en el rendimiento, pero puede afectar la corrección en algunas circunstancias. En particular, mientras no tenga lugar una reasignación, se garantiza que los iteradores en el vector seguirán siendo válidos, y una vez que haya establecido el tamaño / espacio reservado, tiene la garantía de que no habrá reasignaciones siempre que no lo haga ' t aumentar el tamaño más allá de eso.
fuente
whatever[10000] = somepointer;
, donde el último requierepush_back
cada puntero que agregue. Al menos si estás acostumbradovector
, este último es probablemente más simple y más natural.reserve
, que asigna previamente el tamaño de la memoria. En teoría, establecer el tamaño aún podría ser minuciosamente más rápido, ya que también evita aumentar el tamaño actual cada vez que agrega un elemento. En realidad, dudo que puedas medir eso.Debe usar la función de reserva para establecer un tamaño inicial asignado o hacerlo en el constructor inicial.
o
Cuando
reserve()
elementos,vector
asignará suficiente espacio para (¿al menos?) Tantos elementos. Los elementos no existen en elvector
, pero la memoria está lista para ser utilizada. Esto posiblemente se acelerarápush_back()
porque la memoria ya está asignada.fuente
std::vector<Custom Class*> content(100);
)