Jak powiększyć rozmiar tablicy?

0

W programie, który piszę mam zastosować powiększanie rozmiaru tablic.
Wiem, że to samo można osiągnąć stosując listy lub klasę vector ale takie mam zadanie.

W programie mam tablicę (Tab) 100 elementów typu wskaźnik do Obiekt. Za każdym razem gdy tablica się zapełni ma być powiększana o kolejne 100 elementów.

Zacząłem tworząc tymczasową tablicę (Temp) o zwiększonej liczbie elementów i przepisaniu do niej elementów tablicy Tab. Niestety nie bardzo mam pomysł jak to zrobić aby tablicę Tab zmienić w Temp.

0

Masz wskaźnik na tą początkową tablice, dajmy stara ;).
Teraz tworzysz nowy wskaźnik(nowa), alokujesz w nim dynamicznie rozmiar_starej + 100 elementów.
Przepisujesz wszystkie elementy ze starej do nowej i przypisujesz wskaźniki: stara = nowa, oczywiście zwalniając wcześniej pamięć ze starej. :)

0

To co mam to jest zewnętrzna tablica:

Obiekt* Tab[100];

I to ją mam zmienić. Nie wskaźnik na nią.

0
//na początku:
Obiekt** Tab = new Obiekt*[100];
int rozmiar = 100;

//a potem
Obiekt** powieksz(Obiekt** tablica, int size)
{
  Obiekt** tmp = new Obiekt*[size+100];
  for(int i=0;i<size;i++) //przepisanie starych wartosci
    tmp[i]=tablica[i];
  delete[] tablica;
  return tmp;
}
//i wywołujesz:
if(brakło_elementów)
{
  Tab = powiesz(Tab, rozmiar);
  rozmiar+=100;
}
0

Jak widzę źle przedstawiłem problem (albo raczej przedstawiłem inny problem).

Początkowa tablica nie jest tworzona dynamicznie.
Jest deklarowana w pliku nagłówkowym klasy w ten sposób:

Obiekt* Tab[100];

Gdy próbuję jej przypisać tablicę stworzoną w ten sposób:

Obiekt** tmp = new Obiekt*[size+100];

Pokazuje się następujący błąd:

 incompatible types in assignment of `Obiekt**' to `Obiekt*[100]'|
0

W takim razie nie da rady.
Twoja tablica jest tablicą 100 elementów typu wskaźnik do Obiekt i już. Nie mozesz zmienić jej typu.
Albo robisz to dynamicznie, albo zapomnij o zwiększaniu rozmiaru.

0

albo zapoznaj się z std::vector.

0

do MarekR22:
Przeczytaj proszę drugie zdanie mojego pierwszego posta w tym temacie.

do Shalom:
Dziękuję za pomoc, dzięki tobie uświadomiłem sobie, że mogę zadeklarować tablicę Tab w pliku nagłówkowym w ten sposób:

 Obiekt** Tab;

A w konstruktorze zainicjować go za pomocą tablicy dynamicznej tak jak to napisałeś.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.