我面临着将列表与自身拼接的问题。请注意,我已经在 std::list 和迭代器失效上完成了 splice() 问题是关于两个不同的列表。但我的问题是关于同一个列表。
mylist.splice(mylist.end(), mylist, ++mylist.begin());
似乎 gcc 3.x 使移动的迭代器无效。所以我想它正在重新分配和分配节点。这对于同一个列表没有意义。SGI 确实告诉这个版本的 splice 不应该使任何迭代器失效。如果有任何解决方法,这是 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();
};
你知道我在哪里可以找到这些函数定义吗?