头文件
include<list>
简介
list是一种序列式容器。
list容器完成的功能实际上和数据结构中的双向链表是极其相似的,list中的数据元素是通过链表指针串连成逻辑意义上的线性表,也就是list也具有链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作都是快速的。
list的实现大概是这样的:list的每个节点有三个域:前驱元素指针域、数据域和后继元素指针域。
前驱元素指针域保存了前驱元素的首地址;数据域则是本节点的数据;后继元素指针域则保存了后继元素的首地址。
其实,list和循环链表也有相似的地方,即:头节点的前驱元素指针域保存的是链表中尾元素的首地址,list的尾节点的后继元素指针域则保存了头节点的首地址,这样,list实际上就构成了一个双向循环链。
由于list元素节点并不要求在一段连续的内存中,显然在list中是不支持快速随机存取的,因此对于迭代器,只能通过“++”或“--”操作将迭代器移动到后继/前驱节点元素处。而不能对迭代器进行+n或-n的操作,这点,是与vector等不同的地方。
常用方法
list<int> l1 //建立一个空list
list<int> l2(5) //建立一个含有5个元素的list
list<int> l3(5,4) //建立一个含有5个值为4元素的list
list<int> l4(l2) //使用l2初始化l4
list.push_back(a) //将a插入list末尾
list.front() //获得list容器中的头部元素
list.back() //获得list容器的最后一个元素。
list.pop_back(a) //删除末尾元素
list.begin() //回传指向第一个元素的Iterator
list.end() //回传指向最末元素的下一个位置的Iterator
list.empty() //若list内部为空,则回传true值
list.size() //回传list内实际的元素个数
list.insert() //插入元素
list.erase() //删除元素
list.sort() //对元素进行排序
list.reverse() //翻转链表
list.remove() //删除具有指定的值的元素
list.clear() //删除所有元素