Estoy siguiendo un libro de GameInstitute en este momento y me pide que:
Permita que el jugador compre y lleve pociones curativas y pociones de bola de fuego. Puede agregar una matriz de elementos (después de definir la clase de elementos) a la clase Player para almacenarlos, o usar un std :: vector para almacenarlos.
Creo que me gustaría usar la std::vector
implementación, porque eso parece confundirme menos que hacer una clase de elemento, pero no estoy seguro de cómo hacerlo. Muchas personas me han dicho que los vectores son excelentes formas de almacenar valores dinámicos (como elementos, armas, etc.), pero no lo he visto utilizado.
c++
text-based
Vladimir Marenus
fuente
fuente
Respuestas:
std::vector
es una buena manera de almacenar cosas "dinámicas" (como las llama) como elementos, pero el beneficio real del vector no es que lo que está almacenando puede cambiar, sino que la cantidad de elementos en el vector puede cambiar sin un mínimo esfuerzo de tu parte. Para ilustrar, si tuviera que almacenar susItem
objetos como una matriz, tendría que fijar el tamaño de la matriz en tiempo de compilación (Item items[SIZE];
), lo que significa que tiene un límite superior fijo en los elementos (entre otros problemas, que no son t como relevante para este tema específico y, por lo tanto, los omitiré).También podría asignar dinámicamente la matriz en tiempo de ejecución (
Item * items = new Item[SIZE];
), lo que le permitiría cambiar el tamaño de la matriz más tarde al asignar un nuevo almacenamiento, copiar los elementos y eliminar el almacenamiento anterior. Esto, sin embargo, es mucho más trabajo para usted.Afortunadamente, eso es lo que
std::vector
hace por usted: es una implementación de matriz de tamaño dinámico, esencialmente, y maneja la administración de memoria para hacer crecer la matriz más allá de su capacidad actual para usted. Definitivamente es la opción que te sugiero que sigas por ahora, pero ten en cuenta que aún querrás crear unaItem
clase.Es muy fácil de usar:
vector
Probablemente valga la pena leer la documentación de MSDN para la clase , y si no está familiarizado con las plantillas , que es lovector
que le permite almacenar "cualquier cosa", también debe repasar los conceptos básicos. Lo que también me lleva a un punto final: si bien parece que un vector puede almacenar cualquier cosa, tiene restricciones para lo que está permitido y, a veces, esto arroja a los principiantes. En particular, el tipo que almacena en un vector debe ser copiable, porque el vector tendrá que hacer una copia de los objetos al cambiar el tamaño de su almacenamiento interno, por ejemplo. La regla de tres de C ++ es algo a tener en cuenta aquí.fuente