Vektorgröße erweitern
-
Also ich habe in einer Klasse einen Vektor:
class POLYGON : public GEOOBJEKTE { private: vector<koords> punkt; };ich würde diesem nun gerne direkt im Standartkonstruktor eine bestimmte größe mit Inhalt zuweisen, nur krieg ich das nur über den umweg hin einen zweiten vektor zu definieren und diesen mit dem Vektor der Klasse gleichzusetzten.
POLYGON::POLYGON() //Standart-Konstruktor { //Standard-Polygon vector <koords> std_punkt(5); std_punkt[0].x=2.0; std_punkt[0].y=6.0; std_punkt[1].x=0.0; std_punkt[1].y=3.0; std_punkt[2].x=3.0; std_punkt[2].y=0.0; std_punkt[3].x=6.5; std_punkt[3].y=3.5; std_punkt[4].x=5.0; std_punkt[4].y=5.5; punkt = std_punkt; }Ist es also auch irgendwie direkt möglich den unbestimmten vektor der klasse eine größe zuzuweisen?
-
der vektor wird automatisch erweitert, wenn elemente eingefügt werden, das ist seine hauptaufgabe.
-
hm aber wenn ich
folgendes mache, stürtzt mein programm direkt zu beginn abPOLYGON::POLYGON() //Standart-Konstruktor { punkt[0].x=2.0; punkt[0].y=6.0; punkt[1].x=0.0; punkt[1].y=3.0; punkt[2].x=3.0; punkt[2].y=0.0; punkt[3].x=6.5; punkt[3].y=3.5; punkt[4].x=5.0; punkt[4].y=5.5; }
-
Mit dem Index-Operator greifst du auf ein Element zu. Wenn der Vector in deinem 2. Beispiel die Größe Null hat, gibts logischerweise einen Fehler. Elemente kann man mit push_back hinzufügen, und dann vergrößert sich der Vector autom. mit.
Wenn du bereits die Größe kennst, kannst du sie Nachträglich mit resize ändern. Aber das steht eigentlich in jeder C++-Dokumentation drin...
-
class polygon : public geo, object { public: polygon() : m_points(5) { m_points.at(0) = coord(2.0, 6.0); m_points.at(1) = coord(0.0, 3.0); m_points.at(2) = coord(3.0, 0.0); m_points.at(3) = coord(6.5, 3.5); m_points.at(4) = coord(5.0, 5.5); } private: std::vector<coord> m_points; };wäre eine Möglichkeit ... oder einfach per push_back ... dann brauchst du auch nicht vorher im Konstruktor schon die Größe angeben ... Aufruf von std::vector<>::resize(größe) wäre natürlich auch möglich ... also da geht soo viel und du machst es trotzdem falsch
