【发布时间】:2012-05-13 09:03:19
【问题描述】:
我遇到了将列表与自身拼接的问题。请注意,我已经通过splice() on std::list and iterator invalidation 问题是关于两个不同的列表。但我的问题是关于同一个列表。
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();
};
您知道我在哪里可以找到这些函数定义吗?
【问题讨论】:
标签: g++