Przepisanie jednej tablicy do drugiej

Przepisanie jednej tablicy do drugiej
G3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
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

mwl4
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 404
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.

spartanPAGE
  • Rejestracja: dni
  • Ostatnio: dni
3

realloc
http://www.cplusplus.com/reference/cstdlib/realloc/

Kopiuj
#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

G3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

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

stryku
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 607
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ę
G3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
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!

kaczus
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Łódź
  • Postów: 1405
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.

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.