C++ tablice klasy i wskaźniki

C++ tablice klasy i wskaźniki
0

Witam

Mam do zrobienia algorytm imitujacy dzialanie t9(dla klawiatury numerycznej komórki), bez uzycia list i wektorów.
Mam w kodzie taka klasę.

Kopiuj
class wezel {
	public:
	wezel *rodzic; 		// wskaznik na obiekt rodzica
	int klucz;			// wcisniety przycisk na klawiaturze komórki (2-9)
	wezel *dzieci[8];	// wszystkie poddrzewa wychodzace z danego wezla
	string wyraz[10];	// lista wyrazow na ostatnim fragmencie drzewa ktore odpowiadaja wcisnietym przyciskom
};

i tu powstaje pytanie w jaki sposob zapisywac dane dotyczace kolejnych wezlow w tablicy dzieci? Jest to w sumie tablica wskazników i w żaden sposób nie mogę się dostać do tej tablicy aby zapisać lub odczytać dane.

pats
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:12
0

Trzeba zaalokować tablicę dzieci tj. zamienić

Kopiuj
wezel *dzieci[8];

na wezel *dzieci;

Kopiuj
 i gdzieś w kodzie <code class="cpp">dzieci = new wezel[8];

a później dzieci[4].klucz

Kopiuj
Zobacz pozostałe 5 komentarzy
pats
Założyłem, że albo wezel nie ma dzieci, albo ma ich 8. Nie tylko o brak pamięci mi chodziło, a o cache. Sprzęt może nie ten, ale czasy takie same, szczególnie w gamedev.
_13th_Dragon
Wydaje mi się że: - "Założyłem, że albo wezel nie ma dzieci, albo ma ich 8." - nie jest słusznym założeniem. Co do oszczędności ... może dobrym pomysłem jest pójść na 26 dzieci stworzonych jako drzewo binarne zaś węzeł będzie zawierać tylko to drzewo oraz bool IsWord?
pats
Moim zdaniem, zależy to od słownika. Lepiej trzymać 26 (8 w T9) wskaźników do dzieci, czy jeden wskaźnik do drzewa (albo kopca), ale wtedy potrzeba trzymać informację o tym jaka to jest literka (dodatkowy bajt), a więc w pesymistycznym przypadku mamy 26 kolejnych elementów, które trzymają wskaźnik i literkę. Ciekawi mnie ile pamięci można w ten sposób zaoszczędzić, chyba zrobię testy :D
_13th_Dragon
Jak masz 8 w T9 to musisz jeszcze trzymać listę słów, więc lepiej trzymać 26 a ponieważ to jest T9 "oglądać" kilka gałęzi. A masz jakiś wielki słownik dostępny dla tych testów?
pats
Co do pierwszych komentarzy to masz całkowitą rację, alokowanie całych struktur jest po prostu głupie, zwracam honor :) Można wykorzystać np. ten słownik: http://www-01.sil.org/linguistics/wordlists/english/
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:18 dni
0

Na pewno nie potrzebujesz int klucz oraz wezel *rodzic;
Zaś wyrazy ma sens zrobić jako listę:

Kopiuj
class Word { string word; Word *next; public: Word(const string &word,Word *next=0):word(word),next(next) {} };
class Node;
class Level { Node *key[8]; public: Level() { memset(key,0,sizeof(key)); }; ~Level() { ... delete key[i]; } };
class Node { Level keys; Word *first; public: ... };

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

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.