定义:双向链表
头文件:#include<list>
优点:可以在任何位置快速插入/删除元素,移动元素的速度比其他容器效率高。
缺点:不能通过位下标置访问元素。只能从头或尾遍历容器,直到找到该位置。
创建:
创建空list容器:list<int> values;
创建包含n个元素的容器:list<int> values1(n);
创建包含n个元素且赋初值的容器:list<int> values2(n,3);
拷贝已有list容器创建新容器:list<int> values3(values2);
拷贝其它类型容器指定区域内的元素,创建新的list容器:
int a[3]={1,2,3};list<int> values4(a,a+3);
array<int,3> arr{1,2,3};list<int> values5(arr.begin(),arr.end());
迭代器:list<int>::iterator it;
函数:
- begin():头,values.begin();end():尾的后一个,values.end();
- rbegin():尾,values.rbegin();rend():头的前一个,values.rend();
- cbegin()、cend()、crbegin()、crend():在原基础上增加const属性,不能用于修改元素;
- 判断是否为空,是,返回true:values.empty();
- 返回容器实际包含的元素个数:values.size();
- 返回容器所包含元素个数的最大值:values.max_size();
- front():返回第一个元素的引用,int a=values.front();back():返回最后一个元素的引用, int a=values.back();
- assign():用新元素替换容器中的原有内容,values.assign(元素个数,默认值);
- emplace_front():在容器头部生成一个元素,values.emplace_front(e);
- push_front():在容器头部插入一个元素,values.push_front();
- pop_front():删除容器头部的一个元素,values.pop_front();
- emplace_back():容器尾部直接生成一个元素,values.emplace_back(e);
- push_back():在尾部增加一个元素,values.push_back(x); pop_back():删除尾部元素, values.pop_back(x);
- emplace():在容器的指定位置插入元素,比insert()效率高,values.emplace(it,e);
- insert():在容器的指定位置插入元素,values.insert(values.begin(),e);
- erase():删除容器中一个或某区域内的元素,values.erase(it)或values.erase(values.begin(),values.end());
- swap():交换两个容器中的元素,必须保证容器中存储的元素类型相同,swap(values,list_temp);
- resize():调整容器大小,values.resize(n,E);若n大于values元素的总数,E为默认值;若n小于values元素总数,去掉尾部元素。
- clear():删除容器存储的所有元素,values.clear();
- splice():将一个list容器中的元素插入到另一个容器的指定位置;
it=values.begin();
将list_temp中的数据插入到it指向的位置前:values.splice(it,list_temp);
将values中it指向的元素插入到list_temp前:temp_list.splice(temp_splice.begin,values,it);
将values中从头部到it之间的元素插入到尾部之后:
values.splice(values.begin(),values,it,values.end());
- remove(e):删除容器中所有等于e的元素;
- remove_if():删除容器中满足条件的元素
bool isRemove(const int a){return a==2;}
values.remove_if(isRemove);
unique():删除容器中相邻的重复元素,只保留一个values.unique();
merge():合并两个事先排好序的list容器,合并后的list容器依旧有序, values.merge(list_temp)。
merge默认使用<,所以两个list容器中内容需要升序排列。如果两个list容器降序排列, 则需要定义:bool cmp(int a,int b){return (a>b)} values.merge(list_temp,cmp);
sort():通过更改元素中容器的位置,将他们进行排序,values.sort();
reverse():反转容器中元素的顺序,values.reverse();
advance():更改迭代器,advance(it,2):指向list中第三个元素;