vector durchlaufen
-
Ich versuche einen vector bestehend aus Strukturen vom Typ Resonances zu durchlaufen, aber er bleibt immer beim ersten Element stehen.
std::vector<Resonances> ResonanceVec; int size = ResonanceVec.size(); iter = ResonanceVec.begin(); Resonances wert; fprintf(test,"\n\n"); for (int j=0; j < 200; j++) { wert = *iter; if (j == wert.iRow) { iter++; ::AfxMessageBox("Juhu, eine Resonanz!"); } }
Das struct sieht folgendermaßen aus:
struct Resonances { int iRow; float fFrequency; float fValue; int STATE; };
In dem Vector befinden sich z.B. 5 Structs. Jetzt läuft j von 0 bis 199 und wenn j mit dem Eintrag iRow des aktuellen iterators identisch ist, soll er es anzeigen, aber er bleibt immer beim ersten Element stehen. Was ist hier falsch?
-
Wenn j nicht == wert.iRow ist, inkrementierst du den Iterator nicht.
Warum greifst du nicht gleich über den op[] auf die Elemente zu?
-
du willst wahrscheinlich soetwas
std::vector<Resonances> ResonanceVec; fprintf(test,"\n\n"); for (int j=0; j < 200; j++){ for ( std::vector<Resonances>::iterator iter= ResonanceVec.begin(); iter != ResonanceVec.end(); iter++ ) { if (j == (*iter).iRow ) { ::AfxMessageBox("Juhu, eine Resonanz!"); } } }
Kurt
-
Ja genau, danke schön... und wie rückwärts?
std::vector<Resonances> ResonanceVec; for (std::vector<Resonances>::iterator iter=ResonanceVec.end(); iter != ResonanceVec.begin(); iter--) { ... }
und
std::vector<Resonances> ResonanceVec; for (std::vector<Resonances>::reverse_iterator iter=ResonanceVec.rbegin(); iter != ResonanceVec.rend(); iter++) { ... }
haben nicht gefruchtet. Außerdem versuche ich die Indexnummer dem Iterator zu entlocken!?
-
Das das:
zwette schrieb:
Ja genau, danke schön... und wie rückwärts?
std::vector<Resonances> ResonanceVec; for (std::vector<Resonances>::iterator iter=ResonanceVec.end(); iter != ResonanceVec.begin(); iter--) { ... }
Nicht geht wundert mich nicht.
Aber bei dem hier schon. Eigentlich durchläuft das den Vektor rückwärts
zwette schrieb:
und
std::vector<Resonances> ResonanceVec; for (std::vector<Resonances>::reverse_iterator iter=ResonanceVec.rbegin(); iter != ResonanceVec.rend(); iter++) { ... }
haben nicht gefruchtet. Außerdem versuche ich die Indexnummer dem Iterator zu entlocken!?
Das entlocken der Index Nummer erreichst du mit std::distance(ResonanceVec.begin(), iter); // Header Datei <iterator>