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 seus Item
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 uma Item
classe.
É muito fácil de usar:
// Create an item list and two item objects to add to it.
std::vector<Item> items;
Item fireballPotion("Potion of Fireball");
Item healingPotion("Potion of Healing");
// Add the items:
items.push_back(fireballPotion);
items.push_back(healingPotion);
// operator[] is supported for accessing items.
// This will print "Potion of Fireball" for example:
std::cout << items[0].GetName();
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 que vector
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.