dynamische Arrays
-
Hallo Community,
ich habe ein Problem. (Wieso sonst würde ich auch hier reinschreiben) Folgende Aufgabe gilt es zu lösen: Über die serielle Schnittstelle kommen in regelmäßigen Abständen Daten. (2 Temperaturen und eine Spannung, die in Abhängigkeit der Differenz der beiden Temps ist.) Diese Daten sollen in einem Diagramm mithilfe von Qwt (Erweiterung von Qt4) angezeigt werden. Ich weiß vorher noch nicht, wie viele Daten reinkommen werden. (Je nach dem, wie lange das Programm läuft) Damit das Diagramm die Daten anzeigen kann, müssen die in ein Array geschrieben werden. Für die x und y werte je ein eigenes Array. Zusammgengehörige Werte haben den gleichen Index. Bei mir würde das so aussehen, dass ich ein Array für die x-Werte habe (hier ist die Zeit ab Programmstart gespeichert) und dann 3 weitere Arrays, in denen die Temps und die Spannug gespeichert sind. Im Diagramm sollen dann damit 3 Kurve erzeugt werden.
Das eigentliche Problem ist, dass ich bei der erstellung des Arrays ja schon wissen muss, wie groß es einmal werden wird. Ich kann das bei meinem Programm aber nicht vorhersagen. Wie kann ich ein Array erzeugen, wo ich Problemlos weitere Daten hinten ran hängen kann?Eine Idee hätte ich schon, weiß aber nicht, ob die sinnvoll ist: Ich erzeuge am Anfang ein Array, was die Größe 1 hat. Dann speichere ich den ersten Wert rein. Das Array kopiere ich dann in ein anderes, was um genau 1 größer ist, als das erste. Dort schreibe ich dann ins letzt Feld den nächsten Wert, kopiere wieder in ein größeres Array usw.
Das ist aber umständlich, wird bei größeren Datenmengen einiges an Zeit in anspruch nehmen und ich brauche immer noch eine Zählvariable neben her. Außerdem weiß ich nicht, wie man mal so eben ein Array kopieren kann, ohne jedes Feld einzeln zu übertragen.Ich bin dankbar für jeden Sinnvollen Vorschlag.
-
elias.koegel schrieb:
Eine Idee hätte ich schon, weiß aber nicht, ob die sinnvoll ist: Ich erzeuge am Anfang ein Array, was die Größe 1 hat. Dann speichere ich den ersten Wert rein. Das Array kopiere ich dann in ein anderes, was um genau 1 größer ist, als das erste. Dort schreibe ich dann ins letzt Feld den nächsten Wert, kopiere wieder in ein größeres Array usw.
Das ist aber umständlich, wird bei größeren Datenmengen einiges an Zeit in anspruch nehmen und ich brauche immer noch eine Zählvariable neben her. Außerdem weiß ich nicht, wie man mal so eben ein Array kopieren kann, ohne jedes Feld einzeln zu übertragen.Genau diese umständlichen Sachen übernimmt std::vector (dynamisches array) für dich
Eine Alternative dazu ist std::list (linked-list) oder jeder andere Standard-Container.
-
Hast du dir schon einmal die STL Containerklassen angesehen? Das schreit förmlich danach (z.B. ist std::vector<T> als Arrayersatz recht beliebt, vergrößert er sich bei bedarf selbsttätig und kopiert dann die Werte um)...
cu André
-
auch schoen find ich
// pseudo
struct { double var1; double var2; std::tstring var3; } VALUES; std::vector<VALUES> AllContent; void put(VALUES val) { AllContent.push_back(val); }
-
ich nicht Const-Referenz vergessen
struct data_pack { double var1; double var2; std::basic_string<TCHAR> var3; data_pack() : var1(0.0), var2(0.0) {} }; std::vector<data_pack> compl_data; void add_pack(const data_pack& pack) { compl_data.push_back(pack); }
-
Der Name des neuen UDTs gehört schon zwischen "struct" und "{"... nicht hinter "}".
Wir machen ja keinen typedef, ne
-
pwned