3D Array
-
So gut bin ich noch net, wo ist denn der Unterschied?
Vom Gefühl her würde ich sagen die Containerklasse
-
also du kannst eine 2D matrix mit beliebigen ZEILEN aber nur mit 3 SPALTEN
std::vector<std::vector<double> > mat; mat.size()=10; // hier kannst du beliebig deine Zeile festlegen for(int Row= 0;Row<mat.size(); ++Row) { // mat.resize(Row + 1); //optional:wenn du mat.size()unbekannt: Speicher für vector in Matrix reservieren //Speicher für den inneren vector reservieren mat[Row].resize(3); // 3 Steht für die Anzahl der Elemente (Spalten)pro Zeile mat[Row][0]=x; mat[Row][1]=y; mat[Row][2]=z; }
ich habe es nicht getestet aber sollte funktionieren
Viel Glück
-
Ok,
nun bringt er aber folgende Fehlermeldung:
...:error C2146: Syntxfehler: Fehlendes ',' vor Bezeichner 'mat'
...:error C2065: 'mat': nichtdeklarierter Bezeichner
...:error C2143: Syntaxfehler: Fehlendes '>' vor ';'Muss ich vielleicht noch eine include einbinden?
-
Die std::vector Klasse ist Bestandteil der Standard Template Library und ist vom Prinzip her ein dynamisches Array, d.h. es kann beliebig wachsen und schrumpfen. Es hat nichts mit einem mathematischen Vektor zu tun, da käme eher die Klasse valarray in Frage, aber die habe ich noch nie benutzt. Vielleicht hilft dir ja das:
#include <vector> template<typename T> struct Point3D { //Komponenten T x, y, z; //Konstruktor Point3D(T X, T Y, T Z): x(X), y(Y), z(Z) {} //"intuitivere" Art, den Komponenten neue Werte zuzuweisen Point3D& operator()(T X, T Y, T Z) { x = X; y = Y; z = Z; return(*this); } }; /* ......... viel viel Code .........*/ //Hier werden die Punkte gespeichert std::vector<Point3D<double>> punkte; /* Jetzt könntest du Beispielsweise so vorgehen: In einer Schleife gehst du deine Stringarrays durch, wandelst die einzelnen Werte in double um und speicherst sie im dynamischen Array */ for(int i = 0; i < arraySize; i++) //arraySize ist die Größe deiner drei Arrays //von denen ich ausgehe, dass sie gleich groß //sind { //Erzeugen eines neuen Point3D Objektes //rechne_um soll halt zeigen, dass die einzelnen Komponenten vorher //umgerechnet werden. Keine Ahnung, wie du das in deinem Programm machst. Point3D<double> einPunkt(rechne_um(latitude_str[i]), rechne_um(longtitude_str[i]), rechne_um(altitude_str[i]) ); punkte.push_back(einPunkt); //Speichern des neu erzeugten Punkts im dynamischen Array } /* ......... noch mehr Code .........*/
-
ach so ja du musst die
#include <vector>
einbinden
-
ja, die include vector hab ich drin, aber bei der Zeile:
std::vector<Point3D<double>> punkte;
möchte er folgendes Aussehen:
std::vector<Point3D<double>, punkte>;
und dann jammert er immer noch das der Bereichner punkte nicht deklariert wäre.
Kann das vielleicht mit meinem Visual C++ und den Projekteinstellungen was zu tun haben?tschö
-
versuche es mal so:
std::vector< Point3D<double> > punkte;
oder so:
std::vector< Point3D< double > > punkte;std::vector<Point3D<double>, punkte>; ist falsch
-
Jaaaaaaaaaaaaaaaaaaaa
es jeht, das sch.. Ding jeht.
Klasse, ich danke euch
achso, zwei was noch:
1. punkte.push_back(i); bei dem i meintest du doch einPunkt oder?
2. wenn ich die punkte jetzt wieder auslesen will, weil noch weitere Berechnungen folgen kann ich dann vector::at nehmen?HANG LOOSE
-
Ups du hast recht.
ja ich meinte einPunkt, ich ändere es gleich. Nächstes mal sollte ich code testen, bevor ich ihn poste lol
-
Aber trotzdem super, danke nochmal - so hat der Tag gleich ein angenehmes Ende
HANG LOOSE