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>


Anmelden zum Antworten