list 以双向链表的形式实现。list 可以将它们包含的每个元素存储在不同且不相关的存储位置。通过与到它前面的元素的链接和到它后面的元素的链接,在内部保持排序。
list 与 forward_list 非常相似,主要区别在于 forward_list 是单向链表,因此只能进行单向迭代,以换取更小,更有效的交换。
与其他基本标准序列容器相比(array ,vector 和 deque),list 通常在将元素插入,提取和移动容器中已经获得迭代器的位置,因此在大量使用这些元素的算法(例如排序算法)中插入,提取和移动元素时,表现更好。与这些其他序列容器相比 list 和 forward_list 的主要缺点是它们无法通过位置直接访问元素。例如,访问 list 中的第六个元素,则必须从一个已知位置(例如开始或结束)迭代到该位置,这需要在它们之间的距离中花费线性时间。它们还会消耗一些额外的内存来保持与每个元素相关联的链接信息。
模板参数(Template parameters)
1
template <class _Ty, class _Alloc = allocator<_Ty>>//_Ty是元素的类型,_Alloc是分配器类型,有默认的分配器
成员函数(Member functions)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
using value_type = _Ty; using allocator_type = _Alloc; using size_type = typename _Alty_traits::size_type; using difference_type = typename _Alty_traits::difference_type; using pointer = typename _Alty_traits::pointer; using const_pointer = typename _Alty_traits::const_pointer; using reference = value_type&; using const_reference = const value_type&;
using iterator = _List_iterator<_Scary_val>; using const_iterator = _List_const_iterator<_Scary_val>; using _Unchecked_iterator = _List_unchecked_iterator<_Scary_val>; using _Unchecked_const_iterator = _List_unchecked_const_iterator<_Scary_val>; using reverse_iterator = _STD reverse_iterator<iterator>; using const_reverse_iterator = _STD reverse_iterator<const_iterator>;