std::vector
to świetny sposób na przechowywanie „dynamicznych” (jak je nazywasz) rzeczy, takich jak przedmioty, ale prawdziwą zaletą wektora nie jest to, że rzeczy, które przechowujesz, mogą się zmieniać, ale że liczba elementów w wektorze może się zmieniać bez minimalnego wysiłek z twojej strony. Aby to zilustrować, gdybyś miał przechowywać swoje Item
obiekty jako tablicę, musiałbyś ustalić rozmiar tablicy w czasie kompilacji ( Item items[SIZE];
), co oznacza, że masz ustalony górny limit na przedmioty (wśród innych problemów, które nie są jako odpowiednie dla tego konkretnego tematu, więc pominę je).
Możesz także dynamicznie przydzielić tablicę w runtime ( Item * items = new Item[SIZE];
), co pozwoli później zmienić rozmiar tablicy, przydzielając nową pamięć, kopiując elementy i usuwając starą pamięć. Jest to jednak o wiele więcej pracy do wykonania.
Na szczęście to właśnie std::vector
robi dla Ciebie - jest to zasadniczo implementacja macierzy o dynamicznym rozmiarze i obsługuje zarządzanie pamięcią w celu powiększenia macierzy poza jej obecną pojemność. Zdecydowanie jest to opcja, którą sugeruję na razie - ale pamiętaj, że nadal będziesz chciał stworzyć Item
klasę.
Jest bardzo łatwy w użyciu:
// 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();
Dokumentacja MSDN dla tej vector
klasy jest prawdopodobnie warta przeczytania, a jeśli nie znasz szablonów - co vector
pozwala jej na przechowywanie „czegokolwiek” - powinieneś odświeżyć również podstawy. Co prowadzi mnie również do ostatniego punktu: chociaż wygląda na to, że wektor może przechowywać wszystko, ma ograniczenia co do tego, co jest w nim dozwolone, i czasami rzucają początkujących. W szczególności typ przechowywany w wektorze musi być możliwy do skopiowania, ponieważ wektor będzie musiał np. Wykonać kopię obiektów podczas zmiany rozmiaru pamięci wewnętrznej. Należy pamiętać o regule trzech C ++ .