Witam. Realizuję zadanie z Podstaw programowania, o tematyce dynamicznych tablic. Napotkałem na problem: Rozszerzalność tablicy dynamicznej
Zrozumiałem to aby przesłać tablicę jako oryginał do funkcji i zwiększyć jej rozmiar. W takim wypadku utworzyłem tablice kopia gdzie przekopiowałem wszystkie elementy tablicy, potem dynamicznie przydzieliłem pamięć do swojej oryginalnej tablicy z nowym rozmiarem. i znowu przekopiowałem dane, dodając nowy element.
//funkcja dodaje element na koniec tablicy dynamicznej typu int (zadana jako argument)
void DodajNaKoniec( int *tab, int &roz)
{
int ostatni = 999; // element ktory dodamy na koniec
cout << "Dodanie na Koniec liczby: " << ostatni << endl;
int zwiekszony = roz+1; // nowy rozmiar tablicy
int *kopia = new int[zwiekszony]; // bedzie to nasz schowek z liczbami zanim zwiekszymy rozmiar tablicy
// kopiowanie elementow
for(int i=0; i<roz; i++)
kopia[i] = tab[i];
kopia[roz] = ostatni; // dodajemy ostatni element
tab = new int[zwiekszony]; // Przydzielamy na nowo pamiec z nowym rozmiarem
// kopiowanie elementow
for(int i=0; i<zwiekszony; i++)
tab[i] = kopia[i];
roz = zwiekszony; // naszy rozmiar teraz staje sie zwiekszonym
WyswietlTablice(tab, roz);
delete [] kopia; // zwalniamy przydizelona pamiec
}
int main()
{
int roz = 10;
int *tab = new int[roz]; // dynamicznie tworzona tablica
WylosujLiczby(tab, roz);
DodajNaKoniec(tab, roz);
WyswietlTablice(tab,roz);
delete [] tab; // zwalniamy zaalokowana pamiec
return 0;
}
Problemy
- 2 razy została przydzielona Pamieć dynamiczna;
- Przy wyświetleniu tablicy w funkcji widać ostatni element, natomiast po wyjściu z niej nie ma go.
Pytania:
- Czy jest jakaś lepsza możliwość zmiany rozmiaru tablicy dynamicznej ?
- Dlaczego Przy wywolaniu funkcji WyswietlTablicew mainie nie ma elementu 999 ?