std :: vector de la aplicación inteligente de la capacidad

votos
1

Yo sé que el comportamiento de la capacidad std :: vector es específico de la implementación, ¿hay alguna aplicación inteligente que hace esto:

vector<int> v;
for(int i = 0; i < 10000 ; ++i){
    v.push_back(i);
}

En la inicialización, se puede predecir la capacidad del 'vector', en este ejemplo se iniciará la capacidad de 10000

Estoy pidiendo esto porque siempre pensé gcc hace este tipo de predicciones, pero no pude encontrar nada sobre esto ... Creo que he visto esto en alguna parte, así que ¿hay alguna aplicación que hace esto?

Publicado el 25/08/2015 a las 06:52
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
3

Nada se predijo. Sin embargo:

  • uno puede usar reservepara asignar previamente la cantidad máxima requerida de elementos. push_backentonces nunca necesidad de reasignar.

  • push_backutilizar la estrategia de crecimiento de los vectorque asignar más de un solo elemento mor. IIRC el factor de crecimiento es 2, lo que significa que el número de reasignación en una serie de push_backtiende a convertirse logarítmica. Por lo tanto, el costo de las llamadas a N push_backconverge hacia log2(N).

Respondida el 25/08/2015 a las 07:35
fuente por usuario

votos
-4

Existe diferente constructor para std :: vector. Una de estas posibilidades es decir, el valor por defecto y el número de valores que desea a su vector.

A partir de la documentación de std :: vector :

// constructors used in the same order as described above:
std::vector<int> first;                                // empty vector of ints
std::vector<int> second (4,100);                       // four ints with value 100
std::vector<int> third (second.begin(),second.end());  // iterating through second
std::vector<int> fourth (third);                       // a copy of third

Esto es útil si se sabe de antemano el tamaño máximo de su vector.

Respondida el 25/08/2015 a las 07:19
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more