List的好处学过数据结构都知道,List对空间的使用十分精准,绝不浪费,而且插入和移除元素的成本很低
但是如果需要经常访问元素,那么效率可能就不如Vector
List的节点
写过链表的人都知道,List本身和List的节点是不同的结构,需要分开设计
1 | struct _List_node_base { |
节点如上,可以看出是一个双向链表
List迭代器
1 | struct _List_iterator_base { |
可以看出,对运算符的重载依赖于父类的_M_incr()
和_M_decr()
List
1 | template <class _Tp, class _Alloc> |
然后,在class中基本是对_M_node
的操作
1 | iterator begin() { return (_Node*)(_M_node->_M_next); } |
由上可知,_M_node
是最后一个节点,然后前一个是头节点
List对节点的操作
1 | void push_front(const _Tp& __x) { insert(begin(), __x); } |
可以看到,以上操作依赖于insert
1 | iterator insert(iterator __position, const _Tp& __x) { |