patrząc na tą lekcje i zamieszczony w nim treśc zadania
Zmodyfikuj przykładowy kod tak, aby nowa tablica nie była tworzona za każdym razem, gdy dodawany jest nowy element. |
to jest tam napisane krok po kroku całe rozwiązanie
trzeba tylko powstawiać kilka warunków
i stworzyć tablicę zgodnie z treścią zadania
Twoja tablica przyjmuje na samym początku 10 elementów
int * tablica = new int[ 10 ]
za dużo elementów
w tablicy jak na początek, zaczynasz marnować pamięć,
ponieważ nie wiesz ile zostanie wpisanych elementów,
więc lepiej zrobić tablicę o minimalnym rozmiarze
int iloscelementow = 2, rozmiar = 0;
int * tablica = new int[ iloscelementow ]
a potem zamiast tych komentarzy <-- to nie są komentarze tylko polecenia
co trzeba wykonać, uzupełniasz o swój kod
tylko zamiast tworzyć tablicę za każdym razem o 1 element
tak jak jest tam pokazane, patrz poniżej
int * nowa = new int[ rozmiar + 1 ];
robisz np. tak
if( ?>= ? )
int * nowa_tablica = new int[ iloscelementow * 2 ];
Jeżeli używałeś kiedyś kontenera vector < int > wektor;
to tam powiększa się kontener int o 4 elementywęc możesz swoją tablicę powiększać o 4 elementy
int * nowa_tablica = new int[ iloscelementow + 4 ];
Warto szukać złotego środka, aby przypadkiem nie marnować pamięci.
Może dojść do sytuacji, że zarezerwowanej pamięć jest prawie dwa razy więcej
niż ilości elementów znajdujących się w tablicy!
//edit moim zdaniem optymalnie będzie tak
int iloscelementow = 1; rozmiar = 0;
int * nowa_tablica = new int[ iloscelementow * 2 ];
//edit @pekfos (2019-04-15 20:30:32) 3. Przyjąłem do wiadomości.
Wierzę, że nie popełniłem jakegoś wielkiego faux pas.
To zadanie odzwierciedla działanie kontenera vector.
Doczytałem. W kontenerze vector pamięć jest zawsze podwojona, |
bawiąc się klasą vector jeśli kontener zawierał (5) elementów,
przydzielał on nowy blok zdolny do przechowywania (8) elementów
i dlatego wyciągnołem błędny wniosek. Dzięki za zwrócenie mi uwagi.