Mam za zadanie stworzyć klase stos bazując na tablicy. Ok. ustalam sobie rozmiar tablicy przez define itp itd
Tylko jeśli chce dodac cos ponad rozmiar, program ma mi powiększać tą tablice.
W jaki sposób można to zrealizować?
Myślałem nad alokacją nowej tablicy, jednak nie wiem jak ustawić ją na "główną" w klasie po zamianie rozmiaru i przepisaniu tablicy
Przepisanie jednej tablicy do drugiej
- Rejestracja: dni
- Ostatnio: dni
- Postów: 15
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wrocław
- Postów: 404
No cóż.. pozostaje wskaźnik i alokacja pamięci. A kiedy trzeba ci powiększyć stos, no to alokujesz na nowo, i przepisujesz dane itd.
- Rejestracja: dni
- Ostatnio: dni
realloc
http://www.cplusplus.com/reference/cstdlib/realloc/
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int *numbers = NULL, input, count = 0;
while(scanf("%d", &input)!=EOF){
numbers = realloc(numbers, ++count*sizeof(int));
numbers[count-1] = input;
}
int i = 0;
for(i; i < count; ++i)
printf("%d ", numbers[i]);
return 0;
}
in:
1 2 3 4 5
out:
1 2 3 4 5
http://ideone.com/Aj2scp
- Rejestracja: dni
- Ostatnio: dni
- Postów: 15
Czyli alokuje dynamicznie tablice ROZMIAR i jak się kończy miejsce to realokuje? Tylko czy zawartość nie zniknie...
- Rejestracja: dni
- Ostatnio: dni
- Postów: 607
Zawartość nie zniknie bo realloc robi
- Alokuje nową tablicę z nowym rozmiarem.
- Przepisuje starą tablicę na początek nowej.
- Zwalnia starą tablicę
- Rejestracja: dni
- Ostatnio: dni
- Postów: 15
dodam tylko, że żeby realokować, tablica musi być najpierw zaalokowana dynamicznie. Masło maślane, ale jednak ja np. sam chwile myślałem gdzie jest błąd i dlaczego się wyłącza.
Wszystko pięknie działa, dzięki za pomoc!
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Łódź
- Postów: 1405
Można też zrobić sobie listę tablic... Będzie w miarę szybki dostęp do określonego elementu, a jednocześnie nie trzeba będzie realokacji robić. No ale jak to zadanie szkolne, to może rzeczywiście nie być dobry pomysł, choć jako alternatywę bym sobie napisał dodatkowo.