设为首页 加入收藏

TOP

C++STL源码学习(之slist篇)(四)
2015-07-20 17:30:09 来源: 作者: 【 】 浏览:19
Tags:STL 源码 学习 slist篇
__n, __x); } ///在__pos之后插入[__first,__last)之间的值 template void _M_insert_after_range(_Node_base* __pos, _InIter __first, _InIter __last, __false_type) { while (__first != __last) { __pos = __slist_make_link(__pos, _M_create_node(*__first)); ++__first; } } public: iterator insert_after(iterator __pos, const value_type& __x) { return iterator(_M_insert_after(__pos._M_node, __x)); } iterator insert_after(iterator __pos) { return insert_after(__pos, value_type()); } void insert_after(iterator __pos, size_type __n, const value_type& __x) { _M_insert_after_fill(__pos._M_node, __n, __x); } /// We don't need any dispatching tricks here, because _M_insert_after_range /// already does them. template void insert_after(iterator __pos, _InIter __first, _InIter __last) { _M_insert_after_range(__pos._M_node, __first, __last); } ///由于slist是单向链表,因此多采用insert_after来实现插入 ///提供的insert函数也实现找到插入位置的前驱结点,然后调用insert_after来实现的 iterator insert(iterator __pos, const value_type& __x) { return iterator(_M_insert_after(__slist_previous(&this->_M_head, __pos._M_node), __x)); } iterator insert(iterator __pos) { return iterator(_M_insert_after(__slist_previous(&this->_M_head, __pos._M_node), value_type())); } void insert(iterator __pos, size_type __n, const value_type& __x) { _M_insert_after_fill(__slist_previous(&this->_M_head, __pos._M_node), __n, __x); } /// We don't need any dispatching tricks here, because _M_insert_after_range /// already does them. template void insert(iterator __pos, _InIter __first, _InIter __last) { _M_insert_after_range(__slist_previous(&this->_M_head, __pos._M_node), __first, __last); } public: iterator erase_after(iterator __pos) { return iterator((_Node*) this->_M_erase_after(__pos._M_node)); } iterator erase_after(iterator __before_first, iterator __last) { return iterator((_Node*) this->_M_erase_after(__before_first._M_node, __last._M_node)); } ///由于slist是单向链表,因此多采用erase_after来实现删除 ///提供的erase函数也实现找到删除位置的前驱结点,然后调用erase_after来实现的 iterator erase(iterator __pos) { return (_Node*) this->_M_erase_after(__slist_previous(&this->_M_head, __pos._M_node)); } iterator erase(iterator __first, iterator __last) { return (_Node*) this->_M_erase_after( __slist_previous(&this->_M_head, __first._M_node), __last._M_node); } void resize(size_type new_size, const _Tp& __x); void resize(size_type new_size) { resize(new_size, _Tp()); } void clear() { this->_M_erase_after(&this->_M_head, 0); } public: /// Moves the range (__before_first, __before_last ] to *this, /// inserting it immediately after __pos. This is constant time. void splice_after(iterator __pos, iterator __before_first, iterator __before_last) { if (__before_first != __before_last) __slist_splice_after(__pos._M_node, __before_first._M_node, __before_last._M_node); } /// Moves the element that follows __prev to *this, inserting it immediately /// after __pos. This is constant time. void splice_after(iterator __pos, iterator __prev) { __slist_splice_after(__pos._M_node, __prev._M_node, __prev._M_node->_M_next); } /// Removes all of the elements from the list __x to *this, inserting /// them immediately after __pos. __x must not be *this. Complexity: /// linear in __x.size(). void splice_after(iterator __pos, slist& __x) { __slist_splice_after(__pos._M_node, &__x._M_head); } /// Linear in distance(begin(), __pos), and lin
首页 上一页 1 2 3 4 5 6 下一页 尾页 4/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDoj-1018-Big Number 下一篇springmvc+easyui实现透视表-动态..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·About - Redis (2025-12-26 08:20:56)
·Redis: A Comprehens (2025-12-26 08:20:53)
·Redis - The Real-ti (2025-12-26 08:20:50)
·Bash 脚本教程——Li (2025-12-26 07:53:35)
·实战篇!Linux shell (2025-12-26 07:53:32)