list<> - items swapen, wie?



  • hallo,
    also mein problem ist das ich eine liste die ich angelegt habe "updaten" will, sprich ich möchte:
    - das vordersterste item mit dem nächsten swapen
    - das zweite mit dem dritten
    - das dirtte mit dem vierten
    - usw... bis zum ende

    // vorher
    
    Last
     |
     v
    [0][1][2][3][4][5][6][7][8][9][10][11][12]
                                           ^
                                           |
                                         Front
    ===========================================
    // nacher
    
    Last
     |
     v
    [1][2][3][4][5][6][7][8][9][10][11][12][13]
                                            ^
                                            |
                                          Front
    ============================================
    

    ich hoffe meine frage ist verständlich 😣

    Gruß Tobi.



  • Hi,
    ... und wo liegt da das Problem ? Entweder selbst durchiterieren und swappen oder STL-Algorithmen mit Funktionsobjekten benutzen, die das dann erledigen ...



  • for( iter = selements.end( ); iter != selements.begin( ); iter-- ) {

    }
    soweit bin ich schon wreiter weiss ich jetz wirklich net



  • for( iter = selements.end( ); iter != selements.begin( ); iter-- ) {

    }
    soweit bin ich schon wreiter weiss ich jetz wirklich net



  • Also end() darfst du nicht dereferenzieren. Das letzte Element ist end()-1.

    Du kannst aber bei deinem Rückwärts-Durchlaufen einfach nen ReverseIterator nehmen:

    for(iter = rbegin(); iter != rend(); ++iter)



  • Hi Konrad, danke nochmal für das Buch damals 🙂

    T0bi schrieb:

    - das vordersterste item mit dem nächsten swapen
    - das zweite mit dem dritten
    - das dirtte mit dem vierten
    - usw... bis zum ende

    Dabei transportierste doch immer das selbe Element, dann kannst du es doch direkt ans Ende bringen. Oder ?


  • Mod

    if ( !selements.empty() )
    {
       list<...> x;
       x.splice( x.end(), selements, selements.begin() );
       selements.splice( selements.end(), x );
    }
    


  • argh verdammt, ich will aber net das erste zum letzten transf. sondern nur alle elemente eine pos weiter setzen.



  • Wenn du alle Elemente um 1 verschieben willst, was ist denn dann dein neues 1. Element?
    - Wenn du da ein neues hast, brauchste das doch nur vorne vorpacken ohne was zu verschieben?
    - Wenn das letzte Element das 1. werden soll, kannste std::rotate nehmen.



  • T0bi schrieb:

    argh verdammt, ich will aber net das erste zum letzten transf. sondern nur alle elemente eine pos weiter setzen.

    Na dann entferne das letzte Element und füge es vorne an 🙄



  • Ne std::rotate wird wohl am ehesten seinem Wunsch entsprechen 😉


Anmelden zum Antworten