std::vector<CustomClass *> whatever(20000);
o:
std::vector<CustomClass *> whatever;
whatever.reserve(20000);
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.
std::vector
referencia, dependiendo de cuál se adapte mejor a sus necesidades.