简介
list实现的实际上是双向链表,所以叫它doubly-linked list也许更好。 因为实现的是双向链表,所以它有两个非常重要的性质:
- 双向
- 链表
双向
双向意味着----给定一个元素,我们能够知道后一个元素和前一个元素。而这在单项链表里是不可能实现的,因为单向链表只维护了单个方向的元素信息。
这种具体实现决定了,list的迭代器是双向迭代器(Bidirectional Iterator)。
链表
优点
链表, 即 链▪表。 它暗示了链接的实质,也就是说,链表中的元素存储单元不一定是顺序的,只是通过绳子串连起来(-_-)。 这个事实导致了链表的特殊之处----插入和删除操作是常数时间的。 因为执行这两个操作的时候,我们只要修改单个元素两边的信息就可以了,不必动其他数据。 不像很多用数组作为内部结构的容器,这两个操作往往需要移动一部分元素来维持元素位置的正确性。
缺点
当然了,祸福相依,链表的这种机制也导致了它某些方面的欠缺----元素的访问不是常数时间的。 因为链表的顺序是通过额外的数据来维护的(一般是指针),获取元素往往在给定一个迭代器的基础上通过遍历来实现,因此在距离上是线性时间复杂度。
特殊函数
基于链表的特殊性质(常数时间的插入和删除操作),list类模版提供了一些特殊的函数:
- splice:将一个list中的元素 拼接 到另一个list中。 标准文档上给出的解释是“destructively move elements from one list to another”,也就是说两个list对象都会被影响。
- merge:合并两个list,效果上像是splice的特例。
- remove、remove_if:移除相等的元素、移除满足给定条件的元素。
- unique:移除重复的元素,也即使元素唯一。
- sort:对list进行排序。
- reverse:逆转链表,这个对于双向链表来说非常方便,只要交换一下头尾指针的值就可以了。
原文链接: https://www.cnblogs.com/lgxZJ/p/6296898.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/247998
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!