C++ vektor
-
Wes Brot ich ess, des Lied ich sing.
Da musst Du wohl durch.
Und das öffentliche Gezicke gegen die eigene Firma würde ich sein lassen!Naja, wo wir schon Code sehen:
Das mit der Geschwindigkeit lasse ich mal dahingestellt.
Aber bei so einem Firelefanz wie diesem hier geht mir der Hut hoch:struct COLOR{ char col[256]; COLOR* next; }; COLOR* curr; COLOR* first; Konstruktor(){ curr = NULL; first = NULL} if(!first){ first = new COLOR; curr = first; }else{ curr->next = new COLOR; curr = curr->next; } curr->next=NULL; }Wieso hat eine Farbe eine Eigenschaft
next? Und wenn ich schon meine eigene Liste schreibe (haben wir schließlich alle mal), warum dann nicht als Template, sondern für jeden Typ eine eigene? Das ist ganz übler Stil - irgendwas zwischen C, C with classes und C++ ohne STL.Ich würde noch ein Stück weiter gehen als formanz und sogar das eigene
structentfernentypedef std::array<char, 256> COLOR; std::forward_list<COLOR> colors;(und um Ihn zu ärgern habe ich sogar ein
std::arrayeingebaut
)Damit schrumpft Eure Codebasis erheblich - allerdings ist natürlich die Lernkurve der Standardbibliothek auch nicht ganz zu verachten...
Spannend wäre noch zu wissen, wie gut sich Eure container mit den Algorithmen der STL vertragen...
-
Fuchs aus dem Wald schrieb:
Messmethode hab ich doch gepostet.
Du hast nur gezeigt, dass du eine Zeit gemessen hast. Nicht, wovon diese Zeit abhängt.
-
Ja stimmt. Aber ich kann nicht den ganzen Code zeigen. Ich müsste etwas mehr zeigen und ich will nicht so viel davon hier posten.

-
Fuchs aus dem Wald schrieb:
Ich muss alle Daten von der liste in ein Array packen damit ich es überhaupt verschicken kann.

Jetzt fragt ihr euch sicher warum nicht gleich Array ... naja ich kenne die endgültige Größe ja nicht.
Das heißt, es wird erst aus dem späteren Array gelesen und die Datenmenge kann x-beliebig groß sein?
Das hättest du auch gleich zu Anfang schreiben können, da dies stark die Liste begründet (Vorteile hatte ich bereits genannt).
Du musst nun allerdings nicht deine Liste in C Manier wie im ersten Post verwenden, sondern kannst in C++ queue verwenden.
Will heißen: Queue Elemente nach und nach einfügen -> Queue Größe abfragen -> Array mit gleicher Größe erstellen -> Elemente von vorne nach hinten aus der Queue entfernen und in das Array eintragen
-
Youka schrieb:
Das heißt, es wird erst aus dem späteren Array gelesen und die Datenmenge kann x-beliebig groß sein?
Das hättest du auch gleich zu Anfang schreiben können, da dies stark die Liste begründet (Vorteile hatte ich bereits genannt).
Du musst nun allerdings nicht deine Liste in C Manier wie im ersten Post verwenden, sondern kannst in C++ queue verwenden.
Will heißen: Queue Elemente nach und nach einfügen -> Queue Größe abfragen -> Array mit gleicher Größe erstellen -> Elemente von vorne nach hinten aus der Queue entfernen und in das Array eintragenWTF? Mit
std::vectorhast du dann doch schon alles, was du brauchst.
-
Youka schrieb:
aka deque. deque ist der Kompromiss zwischen forward_list und vector, bin nicht sicher, ob du dir dem bewusst bist.
@Furble Wurble: Ist wirklich jedes
std::array<char, 256>ein COLOR-Block? Eine eigene Klasse ist mir da lieber (mit char[256], ein std::array führt zu {{{<data>}}}-Initializern -- ein weiterer Grund, weshalb std::array als Member sinnfrei ist).Mit char werden übrigens nur 2^7-2 positive Werte garantiert, hier ist unsigned char[256] zu empfehlen.
-
formanz schrieb:
Mit char werden übrigens nur 2^7-2 positive Werte garantiert
typischer off-by-one Fehler
-
formanz schrieb:
[@Furble Wurble: Ist wirklich jedes
std::array<char, 256>ein COLOR-Block? Eine eigene Klasse ist mir da lieber (mit char[256], ein std::array führt zu {{{<data>}}}-Initializern -- ein weiterer Grund, weshalb std::array als Member sinnfrei ist).Duck typing - ich habe da kein Problem mit. Das initialisieren mit '{{' '}}' kann ich auch verkraften. Aber std::array ist nicht das Thema dieses Threads.
-
DocShoe schrieb:
WTF? Mit
std::vectorhast du dann doch schon alles, was du brauchst.Ja so sehe ich das auch. Warum immer so umständlich, wenn es doch was gibt was genau das schon kann.
-
camper schrieb:
formanz schrieb:
Mit char werden übrigens nur 2^7-2 positive Werte garantiert
typischer off-by-one Fehler
Wenn 0 noch als positiv gewertet wird, ist das sogar ein off-by-two Fehler.
Edit: Null ist natürlich nicht positiv. Aber weil das hier irgendwie so suggeriert wurde, also nicht-negative Werte...