¿Cómo hacer un nombre de variable sin crear una matriz en C ++?

¿Cómo creas un nombre de variable donde creas una variable y luego, entre paréntesis, el número de variable? (Por cierto, solo estoy adivinando cómo debería ser el código para que entiendas lo que estoy tratando de decir). Por ejemplo:

int var[5]; //create a variable var[5], but not var[4], var[3], var[2], etc. 

Entonces, el número de variable debe poder ser accedido por un valor de variable:

 int number = 5; int var[number]; //creates a var[5], not a var[4], etc. int var[2]; //creates a var[2], not a var[1], etc. cout >>var[number]; number = 2; cin << var[number]; 

Si estoy fuera de lugar con mi “ejemplo”, por favor sugiera algo más. Necesito algo similar a esto para que funcione mi juego, porque debo poder crear una instancia ilimitada de balas, pero también serán destruidas en un punto.

Parece que está buscando la funcionalidad proporcionada por std::map que es un contenedor que se utiliza para asignar claves a valores.

Documentación de std :: map


Ejemplo de uso

En el siguiente ejemplo, vinculamos el valor 123 con la clave entera 4, y el valor 321 con la clave 8. Luego usamos un std::map::const_iterator para iterar sobre los pares clave / valor en nuestro std::map llamado m .

  #include  ... std::map m; m[4] = 123; m[8] = 321; for (std::map::const_iterator cit = m.begin (); cit != m.end (); ++cit) std::cout << cit->first << " -> " << cit->second << std::endl; 

salida:

  4 -> 123 8 -> 321 

Parece que quieres matrices de longitud variable, que no es algo que C ++ admita. En la mayoría de los casos, la solución correcta es utilizar un std::vector lugar, como en

 int number = 42; // or whatever std::vector var(number); 

Puede usar std::vector como usaría una matriz en la mayoría de los casos, y obtiene una gran cantidad de funcionalidad adicional.

Si entiendo lo que quiere correctamente (lo cual no estoy seguro de que lo haga), desea poder crear un lugar para guardar objetos y usarlos de acuerdo con algún número de índice, pero solo para crear los objetos específicos que entran. bajo demanda También desea hacer esto porque 1) no sabe cuántos objetos va a crear o 2) no va a utilizar todos los números de índice o 3) ambos.

Si (1) entonces probablemente deberías usar un vector, que es una estructura similar a una matriz que crece automáticamente a medida que le agregas más cosas. Mire hacia arriba std :: vector.

Si (2) entonces podría usar una matriz de punteros e inicialmente establecer todos los valores en nulo y luego usar new para crear los objetos según sea necesario. (O podría usar la solución recomendada en la parte 3).

Si (3) quiere usar alguna forma de mapa o tabla hash. Estas estructuras le permitirán encontrar cosas por número, incluso cuando no todos los números estén en uso y crecerán según sea necesario. Recomendaría una tabla hash, pero en C ++, no hay ninguna en el STL, por lo que debe crear su propia tabla o encontrarla en una biblioteca de terceros. Para mayor facilidad, puede usar std :: map, que es parte de la STL. Hace básicamente lo mismo, pero es más lento. Algunas distribuciones de C ++ también incluyen std :: hash_map. Si está disponible, debe usarse en su lugar porque será más rápido que std :: map.