これは可能なはずのリンクリストについて知っているようですが、答えがある場所は見つけられませんでしたのでここで尋ねています。std :: list、イテレータのみを使ってリスト内のアイテムを移動する
同じリスト内の項目に対して2つのイテレータを指定します。イテレータ "frm"が指す項目を取り出し、イテレータ "to"が指す項目の前にリストに挿入したいと思います。
"frm"( "frm"を削除する)を指すリスト内の項目のポインタを変更してから、 "to"を指す項目のポインタを変更するだけで、 "frm"を参照し、 "frm"ノード上のポインタを "to"を指すように変更する。
私はこれをどこでも見て、答えを見つけることができませんでした。
リスト内の項目のイテレータのみをリストにアクセスできないため、スプライスを使用できないことに注意してください。
template <typename T>
void move(typename std::list<T>::iterator frm, typename std::list<T>::iterator to) {
//remove the item from the list at frm
//insert the item at frm before the item at to
}
イテレータも、それが属するコンテナ知らなくて、それのコンテナから自分自身を削除するために使用することはできません。また、新しい項目をコンテナに追加するために使用することはできません。反復子は、どのコンテナに属しているかを必ずしも知る必要はありません。 –