0
点赞
收藏
分享

微信扫一扫

【STL】list容器底层实现及特点

日月同辉9908 2022-04-01 阅读 108
c++

【STL】list容器底层实现及特点

底层实现

在这里插入图片描述

容器的底层是以双向链表的形式实现的。node表示链表的头指针,list容器的迭代器操作通过前后指针完成重载。

各个元素的前后顺序是靠指针来联系的,每个元素都配备了 2 个指针,分别指向它的前一个元素和后一个元素。其中第一个元素的前向指针总为 null,因为它前面没有元素;同样,尾部元素的后向指针也总为 null。

特点

因为元素使用链表存储,所以使用 list 容器的缺点是,它不能像 array 和 vector 那样,通过位置直接访问元素,例如使用 vector.at() 函数或 array[ i ] 直接通过下标来访问,只能从头结点或尾结点遍历完成访问。

优点是插入和删除元素更加快速,不需要遍历整个容器去完成元素的移动,时间复杂度仅为O(1)

与其他序列式容器不同,因为独有的双向链表结构,list容器有一些独有的成员函数。

函数名称
splice()将一个 list 容器中的元素插入到另一个容器的指定位置。
remove(val)删除容器中所有等于 val 的元素。
remove_if()删除容器中满足条件的元素。
unique()删除容器中相邻的重复元素,只保留一个。
merge()合并两个事先已排好序的 list 容器,并且合并之后的 list 容器依然是有序的。
sort()通过更改容器中元素的位置,将它们进行排序。
reverse()反转容器中元素的顺序。
举报

相关推荐

0 条评论