Tengo un vector multidimensional muy grande que cambia de tamaño todo el tiempo. ¿Hay algún punto para usar la función vector.reserve() cuando solo conozco una buena aproximación de los tamaños?reserva vectorial C++
Así que básicamente tienen un vector
A[256*256][x][y]
donde x va de 0 a 50 para cada iteración en el programa y luego de vuelta a 0 de nuevo. Los valores y pueden variar cada vez, lo que significa que para cada uno de los elementos [256*256][y]
, el vector y puede ser de un tamaño diferente pero aún más pequeño que 256;
Así que para aclarar mi problema esto es lo que tengo:
vector<vector<vector<int>>> A;
for(int i =0;i<256*256;i++){
A.push_back(vector<vector<int>>());
A[i].push_back(vector<int>());
A[i][0].push_back(SOME_VALUE);
}
añadir elementos al vector ...
A.clear();
Y después de esto hacer lo mismo otra vez desde la parte superior.
Cuándo y cómo debo reservar espacio para los vectores. Si lo he entendido correctamente, ahorraría mucho tiempo si utilizara la reserva ya que cambio los tamaños todo el tiempo.
¿Cuál sería el lado negativo/positivo de reservar el tamaño máximo que mi vector puede tener que sería [256*256][50][256]
en algunos casos.
BTW. Soy consciente de las diferentes plantillas de la matriz y Boost, pero he decidido ir con vectores en éste ...
EDIT: También me preguntaba cómo utilizar la función de reserva en matrices multidimensionales. Si solo reservo el vector en dos dimensiones, ¿se copiará todo si supero su capacidad en la tercera dimensión?
256 * 256 * 50 * 256 * 4 == 3.5 GB. ¿Eso es realmente cierto? – Will
¡Me temo que es así! Pero este es el tamaño máximo ... Probablemente en un entorno será algo así como 256 * 256 * 50 * 100; Técnicamente, el valor máximo nunca se cumplirá ... –