Liste umstapeln nur mit iteratoren?
-
Hallo,
kann ich Elemente in einer Liste an den Anfang verschieben, wenn ich nur zwei Iteratoren für den Anfang und das Ende der Liste habe und keine Referenz auf das list-Objekt?
-
Nope.
Wüsste zumindest nicht wie.
Du kannst natürlich lustig rumkopieren (Elemente zuweisen, aka. operator =), aber nix verschieben.
-
hi nochmal
habs grad mit
std::iter_swap()
hinbekommen
dabei kommt mir doch gleich die nächste frage: was genau ist der unterschied vonstd::swap()
zustd::iter_swap()
?
-
Naja, der Unterschied ist in meinen Augen nicht direkt ein Unterschied.
std::iter_swap()
verwendet internstd::swap()
(zumindest laut Referenz).
Schau hier:
http://www.cplusplus.com/reference/algorithm/iter_swap.html
http://www.cplusplus.com/reference/algorithm/swap.html
-
iter_swap tauscht den Wert (also "Inhalt") zweier Iteratoren. Es entspricht also:
std::iter_swap( it1, it2 ); // =^ std::swap( *it1, *it2 );
-
daersc schrieb:
habs grad mit
std::iter_swap()
hinbekommenDas ist aber nicht wirklich ein Verschieben, sondern ein Tausch.
Verschieben würdest du mit
std::copy()
hinbekommen (wie von hustbaer erwähnt), aber das ist nicht gerade effizient.
-
ich habs bei mir ausprobiert und danach sind die elemente in der ausgangsreihenfolge, nur dass die "verschobenen" eben am Anfang stehen.