W tej chwili śledzę książkę GameInstitute, która wymaga ode mnie:
Pozwól graczowi kupować i nosić mikstury lecznicze oraz mikstury ognistej kuli. Możesz dodać tablicę przedmiotów (po zdefiniowaniu klasy przedmiotu) do klasy odtwarzacza w celu ich przechowywania lub użyć std :: vector do ich przechowywania.
std::vector
Wydaje mi się, że chciałbym skorzystać z implementacji, ponieważ wydaje mi się to mniej mylić niż tworzenie klasy przedmiotów, ale nie jestem pewien, jak to zrobić. Słyszałem od wielu ludzi, że wektory są świetnymi sposobami do przechowywania wartości dynamicznych (takich jak przedmioty, broń itp.), Ale nie widziałem, aby były używane.
c++
text-based
Vladimir Marenus
źródło
źródło
Odpowiedzi:
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ć swojeItem
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:
Dokumentacja MSDN dla tej
vector
klasy jest prawdopodobnie warta przeczytania, a jeśli nie znasz szablonów - covector
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 ++ .źródło