顺序容器list
概述
(以下内容参考stl源码剖析)
相较于vector的连续线性空间,list就更为复杂。其好处是每次插入或删除一个元素,就配置或释放一个元素空间。因此list对于任何位置的元素插入或移除,永远是常数。
是一个环状双向链表,只有一个指向空节点的指针node
iterator begin(){ return (link_type)((*node).next); }
iterator end(){ return node; }
插入
push_front
和push_back
void push_front(_Ty&& _Val){
// insert element at beginning
_Insert(_Unchecked_begin(), _STD move(_Val));
}
void push_back(_Ty&& _Val){
// insert element at end
_Insert(_Unchecked_end(), _STD move(_Val));
}
insert
函数
template<class... _Valty>
void _Insert(_Unchecked_const_iterator _Where, _Valty&&... _Val)
{ // insert element at _Where
const _Nodeptr _Rightnode = _Where._Ptr;
const _Nodeptr _Leftnode = _Rightnode->_Prev;
const _Nodeptr _Newnode = this->_Buynode(_Rightnode, _Leftnode, _STD forward<_Valty>(_Val)...);
_Incsize(1);
_Rightnode->_Prev = _Newnode;
_Leftnode->_Next = _Newnode;
}
```