[+] tablice dynamiczne c++

Potrzebujesz pomocy z C, C++, perl, python, itp.
skotik87
Posty: 98
Rejestracja: 05 kwietnia 2007, 00:20
Lokalizacja: Krakow

[+] tablice dynamiczne c++

Post autor: skotik87 »

Witam, mam problem z tablicami dynamicznymi. Ciag dalszy mojego programu i teraz go musze przerabiac. chce zrobic cos takiego: wczytuje kilka razy dane i chce zeby byly zapamietywane w pamieci (rozszerzenie tablicy dynamicznej) . i tu jest problem nie wiem jak to zrobic zeby to dzialalo. Potrzebne mi to bo chce pozniej dorobic funkcje zebym mogl kiedy chce wybrac opcje zapis i wtedy wszystko co jest w tablicy zapisuje do pliku.

Mniej wiecej tego typu funcja ktora mi wczytuje dane
rekord *nowy_rekord(int n)
{
rekord *rek = new rekord[n];
cout << "Podaj dane :\n";
for(int i=0;i<n;++i)
{
cout << "imie: ";
cin >> rek.imie;
cout << "nazwisko: ";
cin >> rek.nazwisko;
cout << "telefon: ";
cin >> rek.telefon;
}
return rek;
}


Probowalem to zrobic z jakas pomocnicza tablica ale nie wyszlo mi to. Teraz czytam o realloc, moze cos z tego wyjdzie :/

Za wszelkie podpowiedzi dzieki.
Pozdrawiam skotik87
mlyczek
Junior Member
Posty: 979
Rejestracja: 02 sierpnia 2006, 19:17

Post autor: mlyczek »

Jedno pytanie: czy chcesz tworzyć dynamicznie za każdym razem nową tablicę i do niej wczytywać dane, czy masz jedną globalną i chcesz tylko zwiększyć jej rozmiar i w nowe miejsce wczytać dane? Bo do tego pierwszego realloc Ci się nie przyda (a tak zrozumiałem to co napisałeś).
skotik87
Posty: 98
Rejestracja: 05 kwietnia 2007, 00:20
Lokalizacja: Krakow

Post autor: skotik87 »

Najlepiej chyba by bylo zwiekszac jej rozmiar, zreszta mysle ze kazde rozwiazanie bedzie dobre bo mnie zaczyna czas gonic. Wytlumacze na przykladzie o co mi dokladnie chodzi. Zalozmy ze wczytalem dane osoby, pozniej wpisalem dane dwoch osob i stwierdzilem ze sobie teraz to wszystko zapisze do pliku. naciskam klawisz ktory odpowiada za funkcje zapisu i zapisuje. Wczesniej mialem zeby odrazu zapisywalo dane do pliku, ale kolesiowi na uczelni to nie pasuje :/
mlyczek
Junior Member
Posty: 979
Rejestracja: 02 sierpnia 2006, 19:17

Post autor: mlyczek »

tylko, że funkcja, którą podałeś w pierwszym poście nie zmieni Ci rozmiaru tablicy, bo tworzy nową. Nie wiem, co poza opisanymi rzeczami (czytanie danych i pisanie do plików) ma ten program jeszcze robić, ale jeśli to nie przeszkodzi, to wygodniej i łatwiej byłoby zrobić po prostu listę jedno- (lub w razie potrzeby dwu-) stronną. Dane (imię, nazwisko, itd.) trzymać w jakiejś strukturze i tylko tworzyć nową strukturę, wczytywać do niej dane i zapisywać wskaźnik na nową strukturę w ostatniej z listy.

Można też zrobić globalną tablicę i zmieniać jej rozmiar realloc'em, ale wtedy w/w funkcja musiałaby przyjmować jako parametr wskaźnik na ta tablicę (chyba, że funkcja jest definiowana w tym samym module co deklarowana tablica). Musiałbyś też gdzieś trzymać rozmiar tablicy i najprawdopodobniej też przekazywać go do funkcji.

Jeśli wykładowca/ćwiczeniowiec nie zabronił, to możesz też użyć vector'a z STL'a, on sam się rozszerza, Ty tylko dodajesz elementy <- to jest najprostsze w implementacji.
skotik87
Posty: 98
Rejestracja: 05 kwietnia 2007, 00:20
Lokalizacja: Krakow

Post autor: skotik87 »

sprobuje pokombinowac cos z dodatkowa tablica, ewentualnie poszukam cos konkretnego o vectorze. o listach nie mam zielonego pojecia wiec nie probuje bo szkoda mi czasu. moze cos zrobie sensownego
Awatar użytkownika
grzesiek
Junior Member
Posty: 932
Rejestracja: 06 stycznia 2008, 10:41
Lokalizacja: Białystok

Post autor: grzesiek »

w STL są klasy tablic dowolnego typu oparte na template i z przeciążonym operatorem indeksowania[] ;-) .... tablice zwiększają się automatycznie co 10 elementów jak dobrze pamiętam - to takie gotowe rozwiązanie a jak byś chciał sam się w to bawić to albo trzeba zrobić jakąś strukturę albo do tablicy wskaźników dodawać wskaźniki z dynamicznie zaalokowaną strukturą, polecam przestudiowanie źródeł GLib i klasę/strukturę GArray :-)
skotik87
Posty: 98
Rejestracja: 05 kwietnia 2007, 00:20
Lokalizacja: Krakow

Post autor: skotik87 »

mi trzeba latwe i szybkie rozwiazanie tego problemu ;p nie mam tyle czasu zeby kombinowac az tak bardzo z nowymi bibliotekami.
salmon
Beginner
Posty: 296
Rejestracja: 12 października 2007, 23:28
Lokalizacja: Gliwice/Bielsko-Biała

Post autor: salmon »

skotik87 pisze:mi trzeba latwe i szybkie rozwiazanie tego problemu

Kod: Zaznacz cały

#include <vector>
std::vector <rekord> rek]

Tutaj opis: [url]http://www.cplusplus.com/reference/stl/vector/[/url]
Awatar użytkownika
grzesiek
Junior Member
Posty: 932
Rejestracja: 06 stycznia 2008, 10:41
Lokalizacja: Białystok

Post autor: grzesiek »

te biblioteki odwalą za ciebie całą robotę, to właśnie bez nich będziesz siedział w bugach ;) i czas tracił
poza tym nie są takie nowe mają ponad 20 lat ;)
skotik87
Posty: 98
Rejestracja: 05 kwietnia 2007, 00:20
Lokalizacja: Krakow

Post autor: skotik87 »

[quote="grzesiek"]te biblioteki odwalą za ciebie całą robotę, to właśnie bez nich będziesz siedział w bugach ]

heh wlasnie wzialem sie za ta klase, sprobuje cos napisac i wrzuce na forum, zobaczycie czy dobrze. poki co to opornie mi idzie, chyba za duzo na dzisiaj tego wszystkiego.
ODPOWIEDZ