一、前言

list容器,又称为双向链表容器,即该容器的底层是以双向链表的模式实现的,因而list容器中的元素能够扩散存储在内存空间里,而不是必须存储在一整块间断的内存空间中。
list容器中各个元素的前后程序是靠指针维系的,每个元素都有两个指针,别离指向它的前一个元素和后一个元素。第一个元素的前向指针总为 null,因为它后面没有元素;同样,尾部元素的后向指针也总为 null。
长处:能够在序列已知的任何地位疾速插入或删除元素(工夫复杂度为O(1))。并且在 list 容器中挪动元素,也比其它容器的效率高。
毛病:不能通过下标拜访元素,只能从容器中第一个元素或最初一个元素开始遍历容器,直到找到对应元素。
list 容器以模板类 list<T>(T 为存储元素的类型)的模式在<list>头文件中,并位于 std 命名空间中。应用时需蕴含头文件:

#include <list>using namespace std;

二、初始化list容器

一共有5种形式创立list容器

①std::list<int> listInt;②std::list<int> listInt(10);③std::list<int> listInt(10, 5);④std::list<int> listInt2(listInt);⑤//拷贝一般数组,创立list容器int a[] = { 1,2,3,4,5 };std::list<int> listInt(a, a+5);//拷贝其它类型的容器,创立 list 容器std::array<int, 5> arrInt{ 11,12,13,14,15 };std::list<int> listInt(arrInt.begin()+2, arr.end());

①创立空的list容器
②创立一个蕴含10个元素,默认值为0的list容器
③创立一个蕴含10个元素,初始值为5的list容器
④将以初始化的list容器进行拷贝创立新的list容器,须保障新旧容器存储的元素类型统一
⑤通过拷贝其余类型容器(或者一般数组)中指定区域内的元素,创立 list 容器

三、成员函数

这里不列举迭代器、增加和删除等相干的函数。

函数性能
empty()判断容器中是否有元素,若无元素,则返回 true;反之,返回 false
size()返回以后容器理论蕴含的元素个数
max_size()返回容器所能蕴含元素个数的最大值,个别是 232-1
front()返回第一个元素的援用
back()返回最初一个元素的援用
assign()用新元素替换容器中原有内容
swap(x,y)替换两个容器中的元素,必须保障这两个容器中存储的元素类型是雷同的
resize()调整容器的大小
splice()将一个 list 容器中的元素插入到另一个容器的指定地位
merge()合并两个当时已排好序的 list 容器,并且合并之后的 list 容器仍然是有序的
sort()通过更改容器中元素的地位,将它们进行排序
reverse()反转容器中元素的程序

四、实例

1、创立list容器

  std::list<int> listInt;    listInt.push_back(31);    listInt.push_back(27);    listInt.push_back(29);    std::cout << " listInt size: " << listInt.size() << std::endl;    int i = 0;    std::list<int>::iterator listIter = listInt.begin();    for (; listIter != listInt.end(); listIter++)    {        std::cout << " listInt[" << i++ << "]=" << *listIter << std::endl;    }    listInt.sort();    i = 0;    listIter = listInt.begin();    for (; listIter != listInt.end(); listIter++)    {        std::cout << " sort listInt[" << i++ << "]=" << *listIter << std::endl;    }   int nFront = listInt.front();   int nBack = listInt.back();   std::cout << " listInt front: " << nFront << " back: " << nBack << std::endl;   std::list<int> listInt1{ 14,25,99 };   listInt1.sort();   listInt.merge(listInt1);   i = 0;   listIter = listInt.begin();   for (; listIter != listInt.end(); listIter++)   {       std::cout << " merge listInt[" << i++ << "]=" << *listIter << std::endl;   }

后果如下: