注:读者在阅读本文前,需要有 vector 容器的基础。想学习 vector 请看博主的另一篇文章:https://blog.csdn.net/qq_41291253/article/details/89840185
一、list 简介
链表是顺序容器,允许在序列中的任何位置进行恒定时间插入和擦除操作,并在两个方向上进行迭代。
链表容器实现为双向链表; 双向链表可以将它们包含的每个元素存储在不同且不相关的存储位置中。顺序通过链接的每个元素之间的关联保持在内部,即指向前面元素的链接,和指向后面元素的链接。
list 与forward_list非常相似:主要区别在于forward_list对象是单链接列表,因此forward_list只能向前迭代,以换取更小和更高效。
与其他基本标准顺序容器vector和deque相比,list在插入,提取和移动任何位置的元素方面通常表现更好,因此也是在大量使用操作元素的算法中,例如排序算法。和其他容器相比list s和forward_list s 的主要缺点是它们无法通过位置直接访问元素; 例如,访问列表中的第六个元素,必须从已知位置(如开始或结束)迭代到该位置,该位置在这些位置之间的距离中采用线性时间。它们还消耗一些额外的内存来保持与每个元素相关联的链接信息(这可能是大型小型元素列表的重要因素)。
序列:序列容器中的元素按严格的线性顺序排序。各个元素按其顺序访问它们的位置。
双向链表:每个元素保存有关如何定位下一个和前一个元素的信息,允许在特定元素之前或之后(甚至整个范围)进行恒定时间插入和擦除操作,但不允许直接随机访问。
分配器感知:容器使用allocator对象来动态处理其存储需求。
二、函数简介
list member function | |||||||||
iterators: | capacity: | element access | modifiers: | operations: | |||||
begin | 返回容器中第一个元素的迭代器 | size | 返回容器中元素数量 | front | 获取队头元素 | assign | 分配元素 | splice | 从列表到列表传输元素 |
end | 返回容器中最后一个元素的迭代器 | max_size | 返回容器能存储最大元素数量 | back | 获取队尾元素 | push_back | 在队尾压入元素 | remove | 删除具有特定值的元素 |
rbegin | 返回容器中最后一个元素的反向迭代器 | resize | 调整容器大小以使其包含指定大小元素 | push_front | 在队头压入元素 | remove_if | 删除满足条件的元素 | ||
rend | 返回容器中第一个元素的反向迭代器 | empty | 判断容器是否为空 | pop_back | 弹出队尾元素 | unique | 删除重复值 | ||
pop_front | 弹出队首元素 | merge | 合并排序列表 | ||||||