[C++] tablice dynamiczne - zarządzanie elementami


(Kubal92) #1

Witam.

Mam bardzo duży problem z pewnym zadaniem. Muszę stworzyć kilka struktur, a następnie za pomocą odpowiednich funkcji zbudować bazę danych w postaci tablic dynamicznych. Elementy tych tablic powinny być równie łatwo dodawane jak i odejmowane, oraz wyświetlane w czystej formie. Podam kawałek kodu: (możliwe, że idę złym tokiem myślenia)

struct oprawa

{

	int numer;

	int cena;

};


struct szklo

{

	int numer;

	int cena;

};


struct zamowienie

{

	string nazwisko;

	int do_zaplaty;

};


oprawa *tablica_opraw = new oprawa;

szklo *tablica_szkiel = new szklo;

zamowienie *tablica_zamowien = new zamowienie;

Dodać elementy mogę, np. tak:

void dodaj_oprawe(int nr, int cena)

{	

	tablica_opraw[nr].numer = nr;

	tablica_opraw[nr].cena = cena;		

}


void dodaj_szklo(int nr, int cena)

{	

	tablica_opraw[nr].numer =nr;

	tablica_opraw[nr].cena = cena;		

}

... ale w jaki sposób mogę później usunąć, np. wpis nr. 2 spośród 1,2,3,4,5 bez niszczenia całej tablicy? Chciałbym też czytelnie wyświetlić wpisy 1,3,4,5 z całkowitym pominięciem wpisu nr. 2, czyli w miejscu nr. 2 nie może być jakiś losowych danych podczas wyświetlania wyników.

Może powinienem zrobić wiele jednoelementowych tablic dynamicznych, które mógłbym swobodnie usuwać operatorem delete? Jak napisać taką funkcję?

Proszę o szybką pomoc, bo na środę muszę to mieć zrobione.


(Kojot) #2

Po pierwsze musisz deklarować tablice o konkretnym rozmiarze. Na przykład:

oprawa *tablica_opraw = new oprawa [10];

szklo *tablica_szkiel = new szklo [10];

zamowienie *tablica_zamowien = new zamowienie [10];

Wtedy funkcje dodaj_oprawe i dodaj_szklo w przypadku przekroczenia rozmiaru tablicy powinny:

  • albo odmawiać dodania nowego elementu

  • albo tworzyć nową, większą tablicę, przepisywać do niej elementy i niszczyć starą tablicę

Jeśli chodzi o usuwanie elementów ze środka tablicy, to jest to niemożliwe.

Można jednak wykorzystać listy jedno lub dwukierunkowe, w których możliwe jest usunięcie elementu ze środka listy.

Poczytaj: http://staff.iiar.pwr.wroc.pl/wojciech. … _listy.pdf