模板类list是一个容器,所控制的长度N的序列是一个有着N个节点的双向链表。每个节点存储一个单独的元素,一个前驱指针,一个后继指针。list的节点存储在非连续的存储空间中,由于其结构的原因,list的插入、删除、替换等操作速度很快,但元素的查找和随机存取等操作就很慢,需要从头节点一个节点一个节点的往下查找。
包含头文件 #include<list> 声明命名空间 using namespace std;
1)构造函数
list(); //声明一个空的列表,如:list<int> a;
list(int nSize); //创建一个空的列表,元素个数为nSize 如:list<int> a(10);
list(int nSize,const T& val); //创建一个list,元素个数为nSize,且值都为val 如:list<string> a(5,"have fun");
list(const list&); //拷贝(复制)构造函数
如:list<string> a(5,"have fun");
list<string> b(a);
list(begin,end); //复制另一个序列[begin,end)区间内的元素到list中
如:int ia[6] = { -2, -1, 0, 1, 2, 1024 };
list<
int
> a(ia,ia+6);
2)快速插值取值函数
void push_front(const T& val); //列表头部增加一个元素val
如: list<double> a(5,10.1);
a.push_front(5.1);
list<double>::iterator iter;
for(iter=a.begin();iter!=a.end();iter++)
{
cout<<*iter<<endl;
}
程序输出:
void push_back(const T& val); //列表尾部增加一个元素val
如: list<double> a(5,10.1);
a.push_back(5.1);
list<double>::iterator iter;
for(iter=a.begin();iter!=a.end();iter++)
{
cout<<*iter<<endl;
}
程序输出:
void assign(size_type n,const T& x); //重置列表,把列表设置为由n个元素组成的值为x的新列表
如: list<double> a(5,10.1);
a.assign(2,5.1);
list<double>::iterator iter;
for(iter=a.begin();iter!=a.end();iter++)
{
cout<<*iter<<endl;
}
程序输出:
void assign(const_iterator first,const_iterator last); //重置列表,把列表中[first,last)的元素设置成当前元素
如: list<double> a(5,10.1);
list<double> b(3,5.1);
a.assign(b.begin(),b.end());
list<double>::iterator iter;
for(iter=a.begin();iter!=a.end();iter++)
{
cout<<*iter<<endl;
}
程序输出:
iterator insert(iterator it,const T& x); //列表中迭代器指向元素前增加一个元素x
如: list<double> a(5,10.1);
a.insert(++a.begin(),5.1); //这里不能用a.begin()+1,会报错,原因还没查找到资料
list<double>::iterator iter;
for(iter=a.begin();iter!=a.end();iter++)
{
cout<<*iter<<endl;
}
程序输出:
iterator insert(iterator it,int n,const T& x); //列表中迭代器指向元素前增加n个相同的元素x
如: list<double> a(5,10.1);
a.insert(++a.begin(),2,5.1); //这里不能用a.begin()+1,会报错,原因还没查找到资料
list<double>::iterator iter;
for(iter=a.begin();iter!=a.end();iter++)
{
cout<<*iter<<endl;
}
程序输出:
iterator insert(iterator it,const_iterator first,const_iterator last); //列表中迭代器指向元素前插入另一个相同类型列表的[first,last)间的数据
如: list<double> a(5,10.1);
list<double> b(2,5.1);
a.insert(++a.begin(),b.begin(),b.end());
list<double>::iterator iter;
for(iter=a.begin();iter!=a.end();iter++)
{
cout<<*iter<<endl;
}
程序输出:
3)删除函数
iterator erase(iterator it); //删除列表中迭代器指向元素;
iterator erase(iterator first,iterator last); //删除列表中[first,last)中元素,注意last是指向要删除的最后一个元素的下一个元素;
void pop_front(); //删除列表的第一个元素,列表不能为空
void pop_back(); //删除列表的最后一个元素,列表不能为空
void clear(); //清空列表中所有元素,功能等同于erase(list.begin(),list.end());
void remove(const T& x); //移除列表中所有值为x的元素
void remove_if(Pred pr); //移除列表中所有令pr(x)==true的元素
void unique(); //删除列表中相邻的重复元素,一般排序后再去重
void unique(Pred pr); //使用pr来判定是否删除元素
4)遍历函数
reference front(); //返回首元素的引用
reference back(); //返回尾元素的引用
iterator begin(); //返回列表头指针,指向第一个元素
iterator end(); //返回列表尾指针,指向列表最后一个元素的下一个位置
reverse_iterator rbegin(); //反向迭代器,指向最后一个元素
reverse_iterator rend(); //反向迭代器,指向第一个元素之前的位置
5)判断函数
bool empty() const:判断列表是否为空,若为空,则返回true
6)大小函数
void resize(size_type n); //将列表的元素调整到n个,多删少补,值随机
void resize(size_type n,T& x); //将列表的元素调整到n个,多删少补,值为x
int size() const; //返回当前列表中元素的个数
int max_size() const; //返回最大可允许的list元素数量值
7)其他函数
void swap(list& x); //交换两个list中的元素
void splice(iterator it,list& x); //把列表x链接到当前列表迭代器it指向的位置,列表x变为空
void splice(iterator it,list& x,iterator first); //把列表x的first位置的元素链接到当前列表迭代器it指向的位置,列表x中删除first指向的元素
void splice(iterator it,list& x,iterator first,iterator last); //把列表x的[first,last)位置的元素链接到当前列表迭代器it指向的位置,列表x中删除区间[first,last)
void merge(list& x);合并两个链表并使之默认升序
void merge(list& x,Pred pr); //合并两个链表,排序根据比较函数pr()决定
void sort(); //对链表排序,默认升序
void sort(Pred pr); //对链表排序,排序根据比较函数pr()决定
void reverse(); //反转列表元素
原文地址:https://www.cnblogs.com/jason-20160301/p/8850104.html