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 endeDabei transportierste doch immer das selbe Element, dann kannst du es doch direkt ans Ende bringen. Oder ?
-
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
