splice()
メンバ関数を使用して、std::list
の要素位置を移動できるようです。
#include <iostream> #include <list> #include <iterator> int main() { std::list<int> ls = {1, 2, 3, 4, 5}; // 0番目の要素を、2番目に移動 ls.splice(std::next(ls.begin(), 2 + 1), ls, ls.begin()); for (int x : ls) { std::cout << x << std::endl; } }
出力:
2 3 1 4 5
移動元のイテレータは、無効になりません。
#include <iostream> #include <list> #include <iterator> int main() { std::list<int> ls = {1, 2, 3, 4, 5}; // 0番目の要素を、2番目に移動 decltype(ls)::iterator from = ls.begin(); decltype(ls)::iterator to = std::next(ls.begin(), 2 + 1); ls.splice(to, ls, from); std::cout << *from << std::endl; }
出力:
1
いちおう、std::forward_list
の例:
#include <iostream> #include <forward_list> #include <iterator> int main() { std::forward_list<int> ls = {1, 2, 3, 4, 5}; // 0番目の要素を、2番目に移動 ls.splice_after(std::next(ls.before_begin(), 2 + 1), ls, ls.before_begin()); for (int x : ls) { std::cout << x << std::endl; } }
出力:
2 3 1 4 5