std::vector - Verschachteltes Problem
-
Ich denke mal, dass iStruct von diesem Typen hier sein sollte, nicht?
std::vector<std::vector<dein_struct> >::const_iterator iStruct;Den iterator kannst du äquivalent zu allem anderen erzeugen. In den spitzen Klammern schreibst du den Typen von dem, was der vector halten soll. Auch wenn das wieder ein vector von irgendwas ist funktioniert das genau gleicht.
-
ich denke mal, dass iStruct von diesem Typen hier sein sollte, nicht?
Dann gibt es einen:
1>c:\framework\3ds.cpp(278) : error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::_Vector_iterator<_Ty,_Alloc>' (or there is no acceptable conversion)
-
Wie war das mit const nochmal genau?
-
Hubbala...
EDIT: Was hat das mit der Meldung zu tun?
-
std::vector<Vektor_von_Struktur[i].Vektor_in_Struktur>::iteratorSchreibst du einfach irgendwelche Sachen in ein File, wo du dir denkst so oder so ähnlich könnte C++ aussehen, oder was soll das sein?
Lern bitte die Grundlagen.
-
Schreibst du einfach irgendwelche Sachen in ein File, wo du dir denkst so oder so ähnlich könnte C++ aussehen, oder was soll das sein?
Lern bitte die Grundlagen.Wenn du ein paar Posts über dir gelesen hättest, wüsstest du, dass ich den originalen Code abgeändert habe um besseres Verständniss zu schaffen.
-
Kóyaánasqatsi schrieb:
Schreibst du einfach irgendwelche Sachen in ein File, wo du dir denkst so oder so ähnlich könnte C++ aussehen, oder was soll das sein?
Lern bitte die Grundlagen.Wenn du ein paar Posts über dir gelesen hättest, wüsstest du, dass ich den originalen Code abgeändert habe um besseres Verständniss zu schaffen.
dann mach das mal noch mal - und zwar so, dass es auch irgendjmd durchlesen will..
ich les hier nicht 6 zeilen durch, wovon 2 zeilen ca. doppelt so breit sind wie mein monitor und ich dann noch iwelchen kryptischen bezeichner entziffern muss...bb
-
dann mach das mal noch mal - und zwar so, dass es auch irgendjmd durchlesen will..
Will oder kann? Es ist eben nicht einfach zu beschreiben, wenn die potenziellen Helfer den originalen Code nicht verstehen würden.
iwelchen kryptischen bezeichner entziffern muss...
Was ist kryptisch?
Ok, ich versuche es nocheinmal:
Ich habe eine Struktur mit 2 Vektoren. Von dieser Struktur habe ich wieder einen Vektor. Und daher ist die grundlegende Frage: Wie iteriere ich durch die Vektoren in der Struktur? Muss ich dann jedesmal einen neuen Iterator von dem jeweiligen Element des Vektors (der Struktur) anlegen? Und die Preisfrage: Wie sieht das Codetechnisch aus, weil ich das nach diesem Prinzip gemacht habe und nicht verstehe warum es nicht funktioniert?
Danke.
-
mal versuchen...
Ich habe eine Struktur mit 2 Vektoren.struct two_vectors { std::vector<int> first; std::vector<int> second; };Von dieser Struktur habe ich wieder einen Vektor.
typedef std::vector<two_vectors> Tvector_of_two_vectors; Tvector_of_two_vectors vector_of_two_vectors;Und daher ist die grundlegende Frage: Wie iteriere ich durch die Vektoren in der Struktur?
for(Tvector_of_two_vectors::const_iterator i(vector_of_two_vectors.begin()), e(vector_of_two_vectors.end()); i != e; ++i) { for(std::vector<int>::const_iterator i2(i->a.begin()), e2(i->a.end()); i2 != e2; ++i2) { ; } for(std::vector<int>::const_iterator i2(i->b.begin()), e2(i->b.end()); i2 != e2; ++i2) { ; } }dann nimmst du noch pair für die beiden vectoren und schon kannst du ganz bequem mit den typedefs arbeiten - oder schreibst dir selbst nen paar in deine struktur...
bb
-
Ich verstehe deine Erklärung jetzt so:
#include <vector> struct foo { std::vector<int> v; std::vector<int> v2; }; int main () { std::vector<foo> foos; for (std::vector<foo>::iterator it = foos.begin () ; it != foos.end (); ++it) { for (std::vector<int>::iterator it2 = it->v.begin(); it2 != it->v.end(); ++it2) { //... } for (std::vector<int>::iterator it2 = it->v2.begin(); it2 != it->v2.end(); ++it2) { //... } } }EDIT:
LOL unskilled, das nenn ich mal Gedankenübertragung.. :p
-
Sollte funktionieren, Danke.
-
@drakon:
Japp ^^ Hatte ich mir auch so gedacht : DVor allem, da wir auch beide
std::vector<int>genommen haben etc : DAber du kannst ruhig zugeben, dass du die 4 Sekunden genutzt hast, um es zu copy&pasten und noch schnell zu ändern

bb
-
unskilled schrieb:
@drakon:
Japp ^^ Hatte ich mir auch so gedacht : DVor allem, da wir auch beide
std::vector<int>genommen haben etc : DAber du kannst ruhig zugeben, dass du die 4 Sekunden genutzt hast, um es zu copy&pasten und noch schnell zu ändern

bb
So etwas musste ja noch kommen.. -.-
Aber im Ernst, ich glaube die 4 Sekunden, die ich später kam, habe ich damit vergeudet nachzudenken, ob ich auch ein typedef machen soll.. :p
-
Ähhhm, moment mal. Die Vektoren in der Struktur beziehen sich wieder auf Strukturen (^^). Und das Problem ist, dass die Vektoren in der Struktur von dem Vektor der Struktur abhängig sind. Sprich: Pro Element des Vektors der Struktur müssen 2 neue Iteratoren für die 2 Vektoren in der Struktur angelegt werden. Und da lag ich gar nicht mal so falsch... Ich hoffe das hat jetzt irgendwie einer verstanden.
.
Danke
-
Ich glaube kein Mensch versteht was du willst.
Poste doch bitte etwas Code, und bitte nicht "vereinfachten" (sprich: Quatsch), sondern konkret deine Strukturen und Vektoren.
Die Schleife um da drüber zu iterieren sollte trivial sein, aber zu erraten was du meist ist ganz sicher nicht trivial.
-
Kóyaánasqatsi sieh es doch einfach ein, C++ ist eine aussterbende Sprache. Es gibt keine Experten mehr die dein Problem lösen könnten, die sind alle schon auf die Sprachen der Zukunft umgestiegen.
-
@Kóyaánasqatsi,
1. Probier dich mal ein wenig korrekter auszudrücken. Einstd::vectorbezieht sich nicht auf eine Struktur, sondern er beinhaltet Objekte von einer Klasse.
2. "Es gibt eine Struktur, mit einer Struktur, der Struktur durch eine Struktur und Struktur. Wie kann ich die Struktur realisieren." Das kann doch niemand lesen
Du kannst schon vereinfachen, aber gibt den Klassen sprechende Namen. Vor allem wenn du ein Beispiel schaffst, in dem das Konstrukt reinpasst, ist dies sehr hilfreich. Also zum Beispiel:
"Die Klasse Auto hat einen Motor und einenstd::vector, welcher die Räder beinhaltet."
Notfalls erkläre es mit dem, was tatsächlich vorhanden ist. Wir sind ja nicht dumm und wenn du uns ein wenig Erklärung gibst, dann können wir dies nachvollziehen.
Ich verweise da auch mal auf einen wichtigen Thread in diesem Forum:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-200753.htmlFrage nach dem, was du erreichen willst und nicht danach womit du es erreichen willst.
Grüssli
-
Dravere schrieb:
"Die Klasse Auto hat einen Motor und einen std::vector, welcher die Räder beinhaltet."
...
hustbaer schrieb:
Ich glaube kein Mensch versteht was du willst.
Glaube ich auch. Ich denke ich poste mal den kompletten zusammengehörigen Code, bevor ihr mir hier weiter mit der Schübbe au'n Kopp haut...
Die Grundstruktur:
#pragma pack( 1 ) struct Objects { ~Objects() { objectName.clear( ); faces.clear( ); vertices.clear( ); } std::string objectName; std::vector<Faces> faces; std::vector<Vertices> vertices; }; #pragma pack( )Faces und Vertices ist eine andere Struktur, aber die sollte erstmal unwichtig seien.
std::vector<Objects> objects;Unser Vektor der sich auf die Struktur bezieht...
Und das letztendliche durchiterieren:
std::vector<Objects>::iterator iObject; for( iObject = objects.begin( ); iObject < objects.end( ); ++iObject ) { for( std::vector<Faces>::iterator iFace = objects[*iObject].faces.begin( ); iFace < objects[*iObject].faces.end( ); ++iFace ) { for( std::vector<objects[*iObject].vertices>::iterator iVert = objects[*iObject].vertices.begin( ); iFace < objects[*iObject].vertices.end( ); ++iVert ) { } } }Danke.
-
std::vector<Objects>::iterator iObject; for( iObject = objects.begin( ); iObject < objects.end( ); ++iObject ) { for( std::vector<Faces>::iterator iFace = iObject->faces.begin( ); iFace != iObject->faces.end( ); ++iFace ) { for( std::vector<Vertices>::iterator iVert = iObject->vertices.begin( ); iFace != iObject->vertices.end( ); ++iVert ) { } } }-->
std::vector<Objects>::iterator iObject; typedef std::vector<Faces> FacesType; typedef std::vector<Vertices> VerticesType; for( iObject = objects.begin( ); iObject < objects.end( ); ++iObject ) { for( FacesType::iterator iFace = iObject->faces.begin( ); iFace != iObject->faces.end( ); ++iFace ) { for( VerticesType::iterator iVert = iObject->vertices.begin( ); iFace != iObject->vertices.end( ); ++iVert ) { } } }Aber das ist genau das, was Unskilled und ich vorhin gepostet habe..
-
Dann muss ich irgendetwas falsch verstanden haben. Läuft nun, danke.