getter/setter auf Listen
-
Du hast ein Array von Zeigern auf Vector2f. Vermutlich füllst du die Zeiger nie mit sinnvollen Werten => Absturz.
Die Lösung hat Nexus ja schon gezeigt.
-
Danke für die schnelle antwort.
Am Lesen bin ich schon fleissig, bekomme parallel aber auch schon so Übungen mit denen ich mich befassen muss.Auf die Container aus der vector klasse bin auch schon gestossen.
Leider erst am Freitag abend, als ich schon den Ansatz mit der Liste hatte...
werd das dann wohl gleich umbauen.Leider ist mir noch immer nicht klar, wie ich auf eine ebstimmte Position in dem Container zugreifen kann. In der Doku zu vector kann ich auch keine passende Funktion finden.
Angenommen ich habe auf die von Dir angegebene Methode noch 3 weitere Vectoren in dem Container erstellt und möchte nun die Attribute von z.B. dem zweiten abfragen. Wie mache ich das?
Den Inputstream habe ich umgewandelt, weil mir sonst das Programm amokgelaufen ist, sobald ein Buchstabe eingegeben wurde, da in der Vctor2f Klasse die werte als double definiert sind.
Das kann man sicher auch geschickter umgehen, als mit atof, ist für den moment aber zweitrangig.
-
whatevr schrieb:
Leider ist mir noch immer nicht klar, wie ich auf eine ebstimmte Position in dem Container zugreifen kann. In der Doku zu vector kann ich auch keine passende Funktion finden.
operator[]
-
...wer lesen kann ist klar im Vorteil...
Das gibt mir dann ja den Vector2f zurück.
Muss ich darauf dann einen getter anwenden um an die xyz ranzukommen, oder gibt es auch eine elegantere Variante?Wenn ich die Doku richtig verstehe, bedeutet,
vector( vector&& other )
dass ich z.B. auch einen std::vector<std::vector<double>> erstellen könnte.
Werd das jetzt ersteinmal ausprobieren.
Muss das dann beispielweise so aussehen wenn ich den 2. Wert des 5. Vektors haben möchte?return foo[5[2]];Vielen Dank nochmal für die Hilfe!
-
whatevr schrieb:
Muss ich darauf dann einen getter anwenden um an die xyz ranzukommen, oder gibt es auch eine elegantere Variante?
Hängt von deiner Vektorklasse ab.
std::vector::operator[]gibt nur eine Referenz auf ein Objekt dieser Klasse zurück, um den Rest musst du dich selbst kümmern.whatevr schrieb:
Wenn ich die Doku richtig verstehe, bedeutet,
vector( vector&& other )
dass ich z.B. auch einen std::vector<std::vector<double>> erstellen könnte.
Du kannst zwar Container verschachteln, allerdings hat die Syntax
vector&&nichts damit zu tun. Die&&in diesem Kontext bezeichnen eine RValue-Referenz, welche zur Implementierung von Move-Semantik verwendet wird. Damit kannst du Objekte ineinander "verschieben", d.h. unnötige Kopien vermeiden.whatevr schrieb:
Muss das dann beispielweise so aussehen wenn ich den 2. Wert des 5. Vektors haben möchte?
return foo[5[2]];Nein, sondern
foo[5][2](aber denk dran, die Zählung beginnt bei 0). Generell würde ich verschachtelte Container nur einsetzen, wenn du darin einen Vorteil siehst. Du kannst nämlich auch alles auf eine Dimension abbilden und Indizes umrechnen.
-
Danke Nexus!
Sehr hilfreich.
Ohne Verschachtelung läuft auch schon ein Teil des Rechners.
Würde bei der Gelegenheit auch gerne gleich verstehen, wie ich so eine Verschachtelung aufbauen könnte.
Was muss ich denn Beispielhaft in die <> schreiben, damit er auch Vektoren in Form von std::vector aufnimmt?
Bei allen Varianten, die mir bis jetzt eingefallen sind beschwert er sich über fehlende Argumentelisten der "Klassenvorlage "std::vector"".
Damit kann ich leider nur wenig anfangen....
-
Was soll denn der vector in deinem vector für einen Typ speichern können? Das musst du natürlich noch mit angeben.
Aber: Sieh das eher als intellektuelle Übung. Sehr viele Anfänger denken, sie bräuchten verschachtelte vectoren (eine sehr komplexe und somit langsame Datenstruktur), dabei brauchen sie eigentlich einen vector<array> oder einen vector<Typ> mit einem 2D-Wrapper drumherum. Diese beiden wären jedenfalls die erste Wahl, wenn man eine "rechteckige" 2D-Datenstruktur möchte (wobei bei vector<array> die Länge der inneren Dimension zur Compilezeit fest wäre). vector<vector> ist hingegen eine Liste von Listen, das heißt, jeder innere Eintrag hat auch flexible Länge, gänzlich unabhängig von der Länge aller anderer Einträge. Wenn man es braucht, braucht man es (dann ist vector<vector> auch eine sehr effiziente Lösung), wenn nicht, dann verschenkt man jede Menge Rechenzeit, wenn man es trotzdem nutzt.
P.S.: Ich schreibe hier im Text so salopp vector<vector> bzw. vector<array>, das ist natürlich nicht die vollständige Syntax. Wie schon im ersten Absatz erklärt, gehört da natürlich noch zu, auf welchem Typen überhaupt gearbeitet werden soll.
-
Was soll denn der vector in deinem vector für einen Typ speichern können? Das musst du natürlich noch mit angeben.
Ist eigentlich genau das, was ich wissen wollte.
Was für ein Typ ist denn vector?
Bzw. was müsste ich für einen Typ bei einer vector<vector<double>> Verschachtelung angeben.
Letzendlich wäre das ja eine Liste von double Listen.
Würde gerne einfach mal die Syntax kennenlernen...quasi als intellektuelle Übung.
-
Du hast dir die Antwort selber gegeben. vector<double> ist vom Typ vector<double>.
-
seltsam...auf die Weise habe ich immer einen Fehler über fehlende Argumentelisten bekommen.
Habe heut Mittag wahrscheinlich wieder irgendeinen total blöden Fehler (fehlendes Leerzeichen z.B.) gemacht...
Habe einen Thread mit passenden Beispielen gefunden falls jemand auf der Suche über diesen hier stolpert.http://www.c-plusplus.net/forum/138752-full
Also vielen Dank für die Hilfe.
Das Pogramm ist auch schon fast fertig.