include(PUN_ROOT.'syn/css.php'); ?>
Sie sind nicht angemeldet.
Heute möchte auch ich einmal wieder mehr für die Community beitragen als nur mit ein paar Antworten.
In fast allen größeren Projekten und besonders auch in 3D Engines existieren oft dynamische Arrays zur Verwaltung von Objekten, sei es z.B. ein Scenegraph oder eine Renderqueue.
Ich habe mir dafür eine eine kleine, aber feine Klasse geschrieben die ähnlich wie TList arbeitet. Die Klasse verwaltet beliebige Typen durch Pointer (oder somit auch jeden 32 Bit Datentyp direkt) und bietet eine optimiertere Sortierroutine an. Ich verwende dabei den Quicksort Algorithmus, der ab einer kleinen Menge allerdings zum Einfügesort wechselt. Dadurch erreiche ich auf meiner CPU einen Geschwindigkeitsvorteil gegenüber TList von ungefähr 15%.
Ihr könnt die Klasse für jeden Zweck frei verwenden, sei es nur aus Neugierde oder vielleicht sogar aus praktischem Interesse.
Ich verwende dieses Array für meinen Szenengraphen, meine ResourceManager und meine Renderschleife und habe daher auf eine schlanke, aber flinke Klasse viel wert gelegt (was ich eigentlich grundsätzlich tue).
Viel Spaß damit, würde mich über Kommentare und Verbesserungswünsche freuen.
Neo
Offline
Also ich hab mir das gerade mal angeschaut, scheint ganz praktisch zu sein, sofern man nicht löschen will.
Du verschiebst beim löschen alle Nachfolgenden Elemente, oder?
Sofern man kein sortiertes Array benötigt, kann man Elemente viel schneller (mit konstantem Aufwand) löschen, indem man einfach das letzte Element des Arrays an die Stelle kopiert und dann ein pop_back() macht.
Coolcat
Offline
Danke für den Tipp Coolcat, das ist durchaus eine bessere Möglichkeit wenn die Reihenfolge zu keinem Zeitpunkt eine Rolle spielt, in einem Szenengraph ist dies ja z.B. der Fall, dort spielt es keine Rolle an welcher Position ein Element im Array steht.
Ich werde das mal mit einbinden.
Neo
Offline