List是一种序列式容器。List容器完成的功能实际上和数据结构中的双向链表是极其类似的,List中的数据元素是经过链表指针串连成逻辑意义上的线性表,也就是List也具备链表的主要优势,即:在链表的任一位置进行元素的插入、删除操做都是快速的。编程
List的实现大概是这样的,相似双向链表,:list的每一个节点有三个域:前驱元素指针域、数据域和后继元素指针域。数据结构
前驱元素指针域保存了前驱元素的首地址;数据域则是本节点的数据;后继元素指针域则保存了后继元素的首地址。其实,List和循环链表也有类似的地方,即:头节点的前驱元素指针域保存的是链表中尾元素的首地址,List的尾节点的后继元素指针域则保存了头节点的首地址,这样,List实际上就构成了一个双向循环链。app
因为List元素节点并不要求在一段连续的内存中,显然在List中是不支持快速随机存取的,所以对于迭代器,只能经过“++”或“--”操做将迭代器移动到后继/前驱节点元素处。而不能对迭代器进行+n或-n的操做,这点是与vector等不一样的地方。函数
使用list容器以前必须加上<list>头文件:#include<list>;spa
List属于std命名域的内容,所以须要经过命名限定:using std::list;也能够直接使用全局的命名空间方式:using namespace std。指针
优势:(1)内存不连续;blog
(2)动态操做,插入与删除效率高;排序
(3)可在两端进行pop,push。内存
缺点:(1)不能随机访问;rem
(2)相对于vector占用内存多(须要存储前驱后继元素指针域)。
示例:
示例:
示例:
示例:
示例:
示例:
示例:
示例:
示例: