C++ 头文件系列(list)
2017-01-18 15:28
232 查看
简介
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:逆转链表,这个对于双向链表来说非常方便,只要交换一下头尾指针的值就可以了。
相关文章推荐
- 设计模式之代理模式
- Eclipse部署C++环境
- 用汇编分析C++程序
- c++中构造函数和析构函数的概念
- c++ lambda表达式
- 从C到C++看面相对象(深入了解C++的成员函数)
- C++拷贝构造函数详解
- c++第七天
- Python安装lxml出错:error: Microsoft Visual C++ 9.0 is required.
- 实验1-顺序结构 —— C语言实验——交换两个整数的值(1115) ★
- C++-内存管理
- 【C语言学习笔记】调用系统命令system
- 基础之路02,C语言中的指针之间的算术运算
- C语言中的逻辑操作的‘功效’
- 实验1-顺序结构 —— C语言实验——单个字符输入和输出(1113) ★
- fatal error C1189: #error : core.hpp header must be compiled as C++
- C++ 4种Cast
- C++幼儿园[0] - 前言
- 实验1-顺序结构 —— C语言实验——格式化输出(常量练习)(1111)
- Unix下C程序内存泄漏检测工具Valgrind安装与使用