list容器也是序列式容器(不会对存储的数据进行排序)之一,由双向链表实现,每个节点存储一个元素,支持前后两个移动方向。list的优势在于任何位置执行插入和删除动作都非常快,时间复杂度为O(1)。
头文件:#include<list>
list 模板类定义域命名空间 std中。
list 不支持随机存取,因此不提供下标操作符和 at() 函数。
list 不提供容量、空间重新分配等操作函数,每个元素都有自己的内存。
list 提供特殊成员函数,专门用于移动元素,速度更快。
常用list对象定义方法:
list<T> listname; 创建空的list对象
list<T> listname(size); 创建初始大小为size的list对象
list<T> listname(size ,value); 创建初始大小为size ,每个元素初始值为value的 list 对象
list<T> listname(elselist); 复制构造函数
list<T> listname(first, last); 创建一个对象,从其他list对象中复制由迭代器指定范围的多个元素。
常用 list 方法:
push_front(); 头插
push_back(); 尾插
pop_front(); 弹出头结点
pop_back(); 弹出尾节点
insert();
iterator insert(iterator it, const T& x=T()); 把某个元素插入到指定位置;
void insert(iterator it, size_type n, const T& x); 把多个相同的值插入到迭代器所指的起始位置
void insert(iterator it ,const_iterator first, const_iterator last); 在 it 指向的起始地址插入一个指定范围的多个元素
erase(); 删除元素
iterator erase(iterator it); 删除迭代器所指的元素
iterator erase(first, end); 参数简写了 用于删除迭代器所指的范围
clear(); 删除所有元素
size(); 返回list容器中元素的个数
max_size(); 返回list对象最大允许容量,一般是一个非常大的整数
resize(); 调整list对象的大小
迭代器相关函数:
begin(); 指向第一个元素
end(); 指向最后一个元素的下一个位置
rbegin(); 返回指向容器中最后一个元素的位置的反向迭代器
rend(); 返回指向容器中第一个元素所在位置的前一个位置的反向双向迭代器
front(); 返回第一个元素的引用
end(); 返回最后一个元素的引用
empty(); 若为空,则返回true
assign(); 重置元素值的成员函数
assign(first, last); 用其他对象的一个迭代器指定的范围来更新对象对应范围内的值
assign( size_type n, const T& x = T()); 用n个值来更新对象;
swap(); 可实现两个list容器对象的内容交换,在交换的同时,容器大小也发生了变化。
merge(); 可以将两个list对象合并成一个list对象,将参数对象合并到调用对象,合并后元素从小到大升序排列
sort(); 排序,默认从小到大排列。
remove(); 可以实现删除list容器中某个具体的元素,使用remove()不需要指定具体位置,只需告诉要删除的值即可。remove不会改变容器顺序,并且他会删除所有等于参数的元素
remove_if(); 有条件的删除
splice(); 可以将一个对象中的某个元素、或某个范围的元素、或整个对象插入到指定的迭代器后边,合并完成后,x中会减少相应数目的元素
void splice(iterator it, list& x, iterator first); 将x中first指向的元素插入到 it 后边
void splice(iterator it , list& x, iterator first, iterator last);
void splice(iterator it, list& x);
unique(); 这个函数会移除容器中重复的元素
reserve(); 实现逆序