[C/C++] Tablice [zmiana rozmiaru tablicy]

0

Jak w trakcie dzialania programu zmienic wielkosc tablicy?

Powiedzmy że:

     int *tablica=new int[rozmiar];

tworzymy tablice jak pÓźniej zmienić jej rozmiar?

Z gory dzieki :)

0

Wątpię, zeby mozna było zmieniać rozmiar tablicy w trakcie działania programu. Ale możesz zrobić to tak:

Skopiować swoją tabelę do tabeli temp.
Usunąć starą tabelę i od nowa ją stworzyć.
Skopiować dane z temp do nowej tabeli.

0

THX ale jak dwa razy probawalem utworzyc tablice o tej samej nazwie nawet po:

delete[] tablica;

to wyrzucal jakis bland :(

0

Witam ciepło.
Właśnie jem spagetti, w którym makaron ma długość 107 cm.
... snobizm.
[niewinnosc]
do rzeczy kapustka, do rzeczy:

Skopiować swoją tabelę do tabeli temp.
Usunąć starą tabelę i od nowa ją stworzyć.
Skopiować dane z temp do nowej tabeli.

S&M, jestem bardzo bliski powiedzenia "tak jest!", ale według mnie niepotrzebnie użyłeś w opisie dwa razy słowa "skopiować", gdyż po pierwsze źle sie to czyta (buachachacha, sorry, to jest oczywiście żart), a przede wszystkim - dwukrotne kopiowanie zawartości jest to zbędne (aczkolwiek nie jest błędem).

Proponuję drobną korektę:

powiedzmy że chcemy poszerzyć tablicę my_tab jeden element:

  1. Utwórz nową tablicę temp długości większej od my_tab o jeden element.
  2. Skopiuj element po elemencie zawartość my_tab do temp.
  3. Przypisz nowy adres do wskażnika: my_tab = temp

my_tab w rzeczywistości jest wskaźnikiem do tablicy, dlatego my_tab = temp jest instrukcją przypisania adresu zawartego w temp do wskaźnika my_tab. Inaczej mówiąc, po wykonaniu kroku 3) obydwa wskaźniki odwołują się do tego samego obszaru pamięci.

Jedną rzecz przemilczałem. Najczęściej konieczne jest zwolnienie pamięci zajmowanej przez starą tablicę, można to zrobić po wykonaniu 2), ale przed wykonaniem 3). Jak? Zwyczajnie: delete my_tab.

Wracam do snobistycznego makaronu
pozdrawiam
[niewinnosc]

0

Wszystko super ale kcem zrobic cos takiego jak baza danych i bede musial zwiekszac wielkosc tablicy wiele razy.

0

Wszystko super ale kcem zrobic cos takiego jak baza danych i bede musial zwiekszac wielkosc tablicy wiele razy.

Użyj kontenerów z STL.

0

Jest jeszcze jedna możliwość:
Zamiast new i delete użyj malloc i free. Różnica będzie taka, że wtedy masz możliwość użycia funkcji realloc.

0

Proponuje jeszcze jedną możliwość: jak Kapustka, ale nie zwiększaj rozmiaru tablicy o 1 bo to bez sensu. Lepiej tak:

  1. Zacznij od 4 elementów
  2. Gdy tablica jest pełna to zwiększ rozmiar 2 razy
  3. Gdy ma 64 elementu lub więcej to zwiększaj o 1/4

Czyli:
4
8
16
32
64
80
100
125

1 użytkowników online, w tym zalogowanych: 0, gości: 1