Przepisanie jednej tablicy do drugiej

0

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

0

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.

3

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

0

Czyli alokuje dynamicznie tablice ROZMIAR i jak się kończy miejsce to realokuje? Tylko czy zawartość nie zniknie...

1

Zawartość nie zniknie bo realloc robi

  1. Alokuje nową tablicę z nowym rozmiarem.
  2. Przepisuje starą tablicę na początek nowej.
  3. Zwalnia starą tablicę
0

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!

0

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.

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