У меня возникла проблема с сплайсингом списка с самим собой. Заметьте, что я прошел через splice() on std::list and iterator invalidation Там вопрос был о двух разных списках. Но мой вопрос касается того же списка.О 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();
};
У вас есть идеи, где я могу найти эти определения функций?