std::vector Reihenfolge der Elemtente invertieren



  • Ich habe eine Vector Liste deren Reihenfolge ich umdrehen muss.
    Da.h. aus
    1 2 3 4 5

    soll werden
    5 4 3 2 1

    wie mache ich das am sinnvollsten und schnellsten?



  • Wahnsinnig schwer eine Lsg. zu diesem Problem in Google zu finden.
    http://bytes.com/forum/thread59646.html



  • Schau dir mal die Iteratoren an, damit geht sowas:

    std::vector< int >::iterator anfang = dein_vec.begin();
    std::vector< int >::iterator ende = dein_vec.end() - 1; // -1 deshalb, weil end() hinter das letzte element zeigt
    
    //Jetzt steht zwischen anfang und ende alle deine Zahlen in aufsteigender Reihenfolge
    
    // Ok so jetzt nochmals von vorne:
    std::vector< int >::reverse_iterator anfang = dein_vec.rbegin();
    std::vector< int >::reverse_iterator ende = dein_vec.rend() - 1;
    
    //Jetzt steht zwischen anfang und ende alle deine Zahlen in absteigender Reihenfolge
    

    Du kannst natürlich mit so einem Iteratorpaar einen neuen Vektor erzeugen (dazu übergibst du einfach die beiden Iteratoren an dessen Konstruktor), aber wenn du mit den Iteratoren arbeitest willst du vom end-Iterator nie die 1 abziehen, da die ganzen Funktionen die mit diesen arbeiten erwarten, dass "ende" nicht mehr dazu gehört, also als Stopper dient (d.h. wenn anfang so lange vorwärts bewegt wurde bis ende erreicht wurde, dann gibt es kein Element mehr).



  • Ich verstehe die Beispiele aus dem ersten Link:

    // umdrehen
    std::reverse(v1.begin(), v1.end());
    
    // umgedreht kopieren
    std::vector<whatever> v2(v1.size());
    std::reverse_copy(v1.begin(), v1.end(), v2.begin());
    

    wovon ich das erste benötige.

    Aber warum ich mit dem Erzeugen von Iteratoren ein Array invertiere verstehe ich absolut nicht.



  • pospiech schrieb:

    Ich verstehe die Beispiele aus dem ersten Link:

    // umdrehen
    std::reverse(v1.begin(), v1.end());
    
    // umgedreht kopieren
    std::vector<whatever> v2(v1.size());
    std::reverse_copy(v1.begin(), v1.end(), v2.begin());
    

    wovon ich das erste benötige.

    Aber warum ich mit dem Erzeugen von Iteratoren ein Array invertiere verstehe ich absolut nicht.

    Die Iteratoren drehen das nicht um, sondern die reverse-Methode(n) gehen den angebenen Bereich einfach rückwärts aus, bzw. vertauschen die Elemente, so dass die anschließend rückwärts angeordnet da stehen.


Anmelden zum Antworten