【STL】list容器底层实现及特点
底层实现
容器的底层是以双向链表的形式实现的。node表示链表的头指针,list容器的迭代器操作通过前后指针完成重载,支持双向迭代器。
各个元素的前后顺序是靠指针来联系的,每个元素都配备了 2 个指针,分别指向它的前一个元素和后一个元素。其中第一个元素的前向指针总为 null,因为它前面没有元素;同样,尾部元素的后向指针也总为 null。
特点
因为元素使用链表存储,所以使用 list 容器的缺点是,它不能像 array 和 vector 那样,通过位置直接访问元素,例如使用 vector.at() 函数或 array[ i ] 直接通过下标来访问,只能从头结点或尾结点遍历完成访问。
优点是插入和删除元素更加快速,不需要遍历整个容器去完成元素的移动,时间复杂度仅为O(1)
。
与其他序列式容器不同,因为独有的双向链表结构,list容器有一些独有的成员函数。
函数 | 名称 |
---|---|
splice() | 将一个 list 容器中的元素插入到另一个容器的指定位置。 |
remove(val) | 删除容器中所有等于 val 的元素。 |
remove_if() | 删除容器中满足条件的元素。 |