gl5_progのメモ

自分のためのメモとかまとめとか

std::list内の要素を移動させる方法

こことか ここ見てもうまい方法が分からなかったので、とりあえず自分がやった方法をメモ。

移動させる要素を指すイテレータをa
移動先を指すイテレータをb
として、こんなふうにします。

list.insert( b, *a );
list.erase( a );

つまり、普通に新規要素として挿入してから移動させたいやつを消す。
これしか思いつきませんでした。
insertしたあともaのイテレータは有効なのか心配になりますが、cpprefのstd::list::insertのページよると「No iterators or references are invalidated. 」とのことなので大丈夫なようです。

listの場合、要素を追加/削除しなくてもノードのつなぎ替えだけで出来そうなんですけどねぇ。
それができそうなAPIは見つかりませんでした。