Estou acompanhando um livro do GameInstitute agora e está me pedindo para:
Permita que o jogador compre e carregue poções de cura e poções de bola de fogo. Você pode adicionar uma matriz Item (depois de definir a classe do item) à classe Player para armazená-los ou usar um std :: vector para armazená-los.
Eu acho que gostaria de usar a std::vector
implementação, porque isso parece me confundir menos do que criar uma classe de item, mas não tenho certeza de como fazê-lo. Ouvi de muitas pessoas que vetores são ótimas maneiras de armazenar valores dinâmicos (como itens, armas etc.), mas não o vi usado.
c++
text-based
Vladimir Marenus
fonte
fonte
Respostas:
std::vector
é uma ótima maneira de armazenar coisas "dinâmicas" (como você as chama), como itens, mas o benefício real do vetor não é que o que você está armazenando pode mudar, mas que o número de itens no vetor pode mudar sem o mínimo esforço de sua parte. Para ilustrar, para armazenar seusItem
objetos como uma matriz, é necessário fixar o tamanho da matriz no tempo de compilação (Item items[SIZE];
), o que significa que você tem um limite superior fixo para itens (entre outros problemas, que não são ' tão relevante para esse assunto específico e então eu vou pular sobre eles).Você também pode alocar dinamicamente a matriz em tempo de execução (
Item * items = new Item[SIZE];
), o que permitiria redimensionar a matriz mais tarde, alocando novo armazenamento, copiando os itens e excluindo o armazenamento antigo. Isso, no entanto, é muito mais trabalho para você fazer.Felizmente, é isso que
std::vector
faz para você - é uma implementação de matriz de tamanho dinâmico, essencialmente, e lida com o gerenciamento de memória para aumentar a matriz além da capacidade atual para você. Definitivamente, é a opção que eu sugiro que você busque por enquanto - mas observe que você ainda deseja criar umaItem
classe.É muito fácil de usar:
A documentação do MSDN para a
vector
classe provavelmente vale a pena ser lida, e se você não estiver familiarizado com os modelos - que é o quevector
usa para permitir que ele armazene "qualquer coisa" -, você deve atualizar o básico também. O que também me leva a um ponto final: embora pareça que um vetor pode armazenar qualquer coisa, ele tem restrições para o que é permitido nele e, às vezes, são iniciantes. Em particular, o tipo que você armazena em um vetor deve ser copiável, porque o vetor precisará fazer uma cópia dos objetos ao redimensionar seu armazenamento interno, por exemplo. A regra dos três em C ++ é algo a ser lembrado aqui.fonte