私はリストをスプライシングする際に問題が発生しています。私が行ったことに注意してくださいsplice() on std::list and iterator invalidation 質問は2つの異なるリストについてでした。しかし、私の質問は同じリストです。stl list :: spliceについて
mylist.splice(mylist.end(), mylist, ++mylist.begin());
gcc 3.xが移動したイテレータを無効にしているようです。だから私はそれが再び割り当てを解除し、ノードを再度割り当てていると思います。これは同じリストには意味がありません。 SGIはスプライスのこのバージョンがイテレータを無効にすべきでないことを伝えます。何らかの回避策がある場合、gcc 3.xのバグですか?
私はstl_list.hファイルを調べていました。しかし、transfer()関数を使うと、これらの定義を見つけることができませんでした。
struct _List_node_base
{
_List_node_base* _M_next; ///< Self-explanatory
_List_node_base* _M_prev; ///< Self-explanatory
static void
swap(_List_node_base& __x, _List_node_base& __y);
void
transfer(_List_node_base * const __first,
_List_node_base * const __last);
void
reverse();
void
hook(_List_node_base * const __position);
void
unhook();
};
は、あなたが、私はこれらの関数定義を探すことができます任意のアイデアを持っていますか?