slist是一个单向列表 相比与双向列表所耗用的空间更小,某些操作更快
根据STL习惯,插入操作会将新元素插入指定位置之前 而非之后。然后作为一个单向链表,slist没有任何方便的办法可以回头定出前一个位置,因此
他必须从头找起。换句话说,除了slist起点附近的点之外,其他位置上采用inset和erase操作函数,都不是一种好的选择
为了克服这个缺点 slist提供了insert_after()和erase_after()以供
//单向列表的基本结构
struct __slist_node_base{
__slist_node_base* next;
};
//单向链表的节点结构
template <class T>
struct __slist_node:public __slist_node_base{
T data;
};
//全局函数:已知某一节点,插入节点其后
inline __slist_node_base* __slist_make_link(
__slist_node_base *prev_node;
__slist_node_base *new_node)
{
//令new节点的下一节为prev节点的下一节点
new_node->next=prev_node->next;
prev_node->next=new_node;//令prev节点的下一节点指向new节点
return new_node;
}
//全局函数,单向链表的大小(元素个数)
inline size_t __slist_size(__slist_node_base* node)
{
size_t result=0;
for(;node!=0;node=node->next)
++result;//一个一个累计
return result;
}
/**
单向链表的迭代器基本结构
*/
struct __