List容器list是C++标准模版库(STL,StandardTemplateLibrary)中的部分内容。实际上,list容器就是一个双向链表,可以高效地进行插入删除元素。使用list容器之前必须加上vector头文件:#includelist;list属于std命名域的内容,因此需要通过命名限定:usingstd::list;也可以直接使用全局的命名空间方式:usingnamespacestd;构造函数listintc0;//空链表listintc1(3);//建一个含三个默认值是0的元素的链表listintc2(5,2);//建一个含五个元素的链表,值都是2listintc4(c2);//建一个c2的copy链表listintc5(c1.begin(),c1.end());////c5含c1一个区域的元素[_First,_Last)。成员函数c.begin()返回指向链表第一个元素的迭代器。c.end()返回指向链表最后一个元素之后的迭代器。1listinta1{1,2,3,4,5};2listint::iteratorit;3for(it=a1.begin();it!=a1.end();it++){4cout*it\t;5}6coutendl;c.rbegin()返回逆向链表的第一个元素,即c链表的最后一个数据。c.rend()返回逆向链表的最后一个元素的下一个位置,即c链表的第一个数据再往前的位置。1listinta1{1,2,3,4,5};2listint::reverse_iteratorit;3for(it=a1.rbegin();it!=a1.rend();it++){4cout*it\t;5}6coutendl;operator=重载赋值运算符。1listinta1{1,2,3,4,5},a2;2a2=a1;3listint::iteratorit;4for(it=a2.begin();it!=a2.end();it++){5cout*itendl;6}c.assign(n,num)将n个num拷贝赋值给链表c。c.assign(beg,end)将[beg,end)区间的元素拷贝赋值给链表c。1inta[5]={1,2,3,4,5};2listinta1;3listint::iteratorit;4a1.assign(2,10);5for(it=a1.begin();it!=a1.end();it++){6cout*it;7}8coutendl;9a1.assign(a,a+5);10for(it=a1.begin();it!=a1.end();it++){11cout*it;12}13coutendl;c.front()返回链表c的第一个元素。c.back()返回链表c的最后一个元素。1listinta1{1,2,3,4,5};2if(!a1.empty()){3coutthefirstnumberis:a1.front()endl;4coutthelastnumberis:a1.back()endl;5}c.empty()判断链表是否为空。1listinta1{1,2,3,4,5};2if(!a1.empty())3couta1isnotemptyendl;4else5couta1isemptyendl;c.size()返回链表c中实际元素的个数。1listinta1{1,2,3,4,5};2couta1.size()endl;c.max_size()返回链表c可能容纳的最大元素数量。1listinta1{1,2,3,4,5};2couta1.max_size()endl;c.clear()清除链表c中的所有元素。1listinta1{1,2,3,4,5};2listint::iteratorit;3coutclearbefore:;4for(it=a1.begin();it!=a1.end();it++){5cout*it\t;6}7coutendl;8a1.clear();9coutclearafter:;10for(it=a1.begin();it!=a1.end();it++){11cout*it\t;12}13coutendl;c.insert(pos,num)在pos位置插入元素num。c.insert(pos,n,num)在pos位置插入n个元素num。c.insert(pos,beg,end)在pos位置插入区间为[beg,end)的元素。1listinta1{1,2,3,4,5};2listint::iteratorit;3coutinsertbefore:;4for(it=a1.begin();it!=a1.end();it++){5cout*it;6}7coutendl;89a1.insert(a1.begin(),0);10coutinsert(pos,num)after:;11for(it=a1.begin();it!=a1.end();it++){12cout*it;13}14coutendl;1516a1.insert(a1.begin(),2,88);17coutinsert(pos,n,num)after:;18for(it=a1.begin();it!=a1.end();it++){19cout*it;20}21coutendl;2223intarr[5]={11,22,33,44,55};24a1.insert(a1.begin(),arr,arr+3);25coutinsert(pos,beg,end)after:;26for(it=a1.begin();it!=a1.end();it++){27cout*it;28}29coutendl;c.erase(pos)删除pos位置的元素。1listinta1{1,2,3,4,5};2listint::iteratorit;3couterasebefore:;4for(it=a1.begin();it!=a1.end();it++){5cout*it;6}7coutendl;8a1.erase(a1.begin());9couteraseafter:;10for(it=a1.begin();it!=a1.end();it++){11cout*it;12}13coutendl;c.push_back(num)在末尾增加一个元素。c.pop_back()删除末尾的元素。c.push_front(num)在开始位置增加一个元素。c.pop_front()删除第一个元素。1listinta1{1,2,3,4,5};2a1.push_back(10);3listint::iteratorit;4coutpush_back:;5for(it=a1.begin();it!=a1.end();it++){6cout*it;7}8coutendl;910a1.pop_back();11coutpop_back:;12for(it=a1.begin();it!=a1.end();it++){13cout*it;14}15coutendl;1617a1.push_front(20);18coutpush_front:;19for(it=a1.begin();it!=a1.end();it++){20cout*it;21}22coutendl;2324a1.pop_front();25coutpop_front:;26for(it=a1.begin();it!=a1.end();it++){27cout*it;28}29coutendl;resize(n)从新定义链表的长度,超出原始长度部分用0代替,小于原始部分删除。resize(n,num)从新定义链表的长度,超出原始长度部分用num代替。1listinta1{1,2,3,4,5};2a1.resize(8);3listint::iteratorit;4coutresize(n):;5for(it=a1.begin();it!=a1.end();it++){6cout*it;7}8coutendl;910a1.resize(10,10);11coutresize(n,num):;12for(it=a1.begin();it!=a1.end();it++){13cout*it;14}15coutendl;c1.swap(c2);将c1和c2交换。swap(c1,c2);同上。1listinta1{1,2,3,4,5},a2,a3;2a2.swap(a1);3listint::iteratorit;4couta2.swap(a1):;5for(it=a2.begin();it!=a2.end();it++){6cout*it;7}8coutendl;910swap(a3,a2);11coutswap(a3,a2):;12for(it=a3.begin();it!=a3.end();it++){13cout*it;14}15return0;c1.merge(c2)合并2个有序的链表并使之有序,从新放到c1里,释放c2。c1.merge(c2,comp)合并2个有序的链表并使之按照自定义规则排序之后从新放到c1中,释放c2。1listinta1{1,2,3},a2{4,5,6};2a1.merge(a2);3listint::iteratorit;4couta1.merge(a2):;5for(it=a1.begin();it!=a1.end();it++){6cout*it;7}8coutendl;910a2.merge(a1,[](intn1,intn2){returnn1n2;});11couta2.merge(a1,comp):;12for(it=a2.begin();it!=a2.end();it++){13cout*it;14}15coutendl;c1.splice(c1.beg,c2)将c2连接在c1的beg位置,释放c21listinta1{1,2,3},a2{4,5,6};2a1.splice(a1.begin(),a2);3listint::iteratorit;4couta1.merge(a2):;5for(it=a1.begin();it!=a1.end();it++){6cout*it;7}8coutendl;c1.splice(c1.beg,c2,c2.beg)将c2的beg位置的元素连接到c1的beg位置,并且在c2中施放掉beg位置的元素1listinta1{1,2,3},a2{4,5,6};2a1.splice(a1.begin(),a2,++a2.begin());3listint::iteratorit;4couta1.merge(a2):;5for(it=a1.begin();it!=a1.end();it++){6cout*it;7}8coutendl;9return0;c1.splice(c1.beg,c2,c2.beg,c2.end)将c2的[beg,end)位置的元素连接到c1的beg位置并且释放c2的[beg,end)位置的元素1listinta1{1,2,3},a2{4,5,6};2a1.splice(a1.begin(),a2,a2.begin(),a