Datentyp von Struktur...?
-
Ah, müssen die Variablennamen denn mit denen überweinstimmen, die man mit push_back wieder zurückgibt? Sprich, wenn oben in der Struktur x, y, z deklariert sind, müssen die Bezeichner dann auch x, y, z heissen, damit man die zurückgeben kann? Verstehe ich nicht ganz, sonst könnte man ja auch normale Integer-Werte übergeben.
-
Bitteschön:
http://www.cplusplus.com/std::vector darfst du dir selber suchen.
Aber ich denke mal, dass du den falsch verstanden hast.
std::vector ist ein Container für einen beliebigen Datentypen (den du in den spizten Klammern angibst). Sprich der kann beliebig viele Instanzen dieses Types halten. Dann kannst du auch noch, wie bei einem Array per []-Operator auf die Elemente zugreifen. Hat aucht sonst noch viele Vorteile..Bei dir wäre das:
std::vector<Struktur_1> p_Struktur_1;Noch leer, da du noch nichts eingefügt hast.
Struktur_1 s1; s1.x = 2; s1.y = 3; s1.z = 5; p_Struktur_1.push_back ( s1 );p_Struktur_1 enthält jetzt genau ein Element vom Typen Struktur_1. Da kannst du jetzt z.B so darauf zugreifen:
std::cout << p_Struktur_1[ 0 ].x; // 0 ist der Index für das erste Element // und da eine Instanz vom Tyen Struktur_1 // zurückgegeben wird, kannst du die Member x auswählen.
-
Achso, ok. Zu dem letzten Codestück das du gepostet hast, würde man das Element nicht einfach so abrufen?
p_Struktur_1[0]?
-
Ja du rufst die Struktur ab, die am Index 0 steht. Aber um auf die elemente der Struktur zuzugreifen musst du logischer Weiße noch angeben welche Member also
std::cout<<p_Struktur_1[0].x<<std::endl; std::cout<<p_Struktur_1[0].y<<std::endl; std::cout<<p_Struktur_1[0].z<<std::endl;
-
Sry wenn ich so viel Frage...
Also kann man dann in diesem Falle nur die Instanzen aus der 1. Struktur mit push_back anlegen...?
-
wie-wo-was schrieb:
Sry wenn ich so viel Frage...
Also kann man dann in diesem Falle nur die Instanzen aus der 1. Struktur mit push_back anlegen...?Inwiefern "anlegen"?Du kannst soviele Instanzen der ersten Struktur "rein_push_backen()", soviel dein RAM hergibt

-
wie-wo-was schrieb:
Sry wenn ich so viel Frage...
Also kann man dann in diesem Falle nur die Instanzen aus der 1. Struktur mit push_back anlegen...?Schau dir am besten einmal den Link, den ich gepostet habe in Ruhe an. (also unter std::vector) und dann google mal nach Beispielen, wenn du es immer noch nicht verstehst. Es gibt viele gute Tutorials, wo der Einstieg recht gut erklärt ist.
-
Nein, ich meinte eigentlich, dass man nur die Instanzen anlegen kann, sprich:
#include <iostream> #include <vector> using namespace std; struct struk_1 { int x; int y; int z; }; struct struk_2 { vector<struk_1> p_struk_1; }; int main(void) { struk_1 s1; struk_2 s2; s1.x = 250; s1.y = 500; s2.z = 750; cout<< s2.p_struk_1.push_back( s1.x ) <<endl; cin.get(); }und nicht:
#include <iostream> #include <vector> using namespace std; struct struk_1 { int x; int y; int z; }; struct struk_2 { vector<struk_1> p_struk_1; }; int main(void) { struk_1 s1; struk_2 s2; int z = 250; int y = 500; int x = 750; cout<< s2.p_struk_1.push_back( s1.x ) <<endl; cin.get(); }
-
Ich glaube du verwechselst da vollständig was
Das hier:cout<< s2.p_struk_1.push_back( s1.x ) <<endl;funktioniert nicht. Da kriegst du eine Compilerfehlermeldung. Du willst in einen Vector einen int-Wert pushen, obwohl dein Vector eine struktur erwartet, das kann nicht gut gehen, stimmts oder?;)
-
struk_1 s1; struk_2 s2; int z = 250; int y = 500; int x = 750;Diese 5 Variablen haben rein gar nichts miteinander zu tun.
z,y,x sind völlig unabhängige Variablen vom Typ Integer. Dass die gleich heissen, wie etwas in einer Klasse drin, spielt überaupt keine Rolle. (Ausser du deklarierst sie innerhalb einer Memberfunktion, wo sie die Memer dann einfach überdecken,aber das ist ein anderes Thema..)
-
oO...ähh

-
Tut mir ja leid, aber jetzt bin ich verwirrt oO...
Es wäre keiner so nett, mir ein minimales Beispiel zu tippen?
-
Haben wir doch..

Naja.
std::vector<int> v; // vector von int's v.push_back ( 2 ); // pushe einen integer vom wert 2 rein v.push_back ( 3 ); // pushe einen integer vom wert 3 reinv hat nun 2 integer drin. Der erste hat den Wert 2, der zweite den Wert 3.
Nun kannst du aber einen vector für einen beliebigen Typen erstellen:
class foo{}; std::vector<foo> foos; foos.push_back ( foo () ); // pushe ein foo in den vector, was auch immer das ist..Wenn du das immernoch nicht verstehst, dann sag wenigstens, was du nicht verstehst..
-
Ah, ich habs kapiert, danke schön!
:xmas1: :xmas2: