现在的位置: 首页 > 操作系统 > 正文

C++头文件系列(list)

2020年02月10日 操作系统 ⁄ 共 973字 ⁄ 字号 评论关闭

简介

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:逆转链表,这个对于双向链表来说非常方便,只要交换一下头尾指针的值就可以了。

本文永久更新链接地址:http://www.xuebuyuan.com/Linux/2017-01/139906.htm

以上就上有关C++头文件系列(list)的相关介绍,要了解更多C++ 头文件,C++ 头文件系列(list),编程,Linux编程,Linux Shell,Android,Android教程,JAVA,C语言,Python,HTML5内容请登录学步园。

抱歉!评论已关闭.