STL中的容器list使用(用于记录)
C++标准库中的list是一个双向循环链表,不支持迭代器进行随机访问,只允许迭代器进行自加或者自减操作,弱于vector。
- 头文件
#include <list>
using namespace std;//命名空间
- 构造函数
list<val_type> list_test;//默认构造
list<val_type> list1(list2);//拷贝构造
- 新增和插入节点
list_test.push_front(e);//在链表头部加入元素
list_test.push_back(e);//在链表尾部加入元素
list_test.insert(pos,e);//pos采用迭代器获取,在pos处插入元素e
list_test.insert(pos,n,e);//在pos处插入n个元素e
list_test.insert(pos,list1.begin(),list1.end());//在pos处插入list1从begin到end的元素
- 删除与清空节点
list_test.pop_back();//删除尾部节点
list_test.pop_front();//删除头部节点
list_test.erase(pos);//删除pos处的节点,返回下一个元素的位置
list_test.erase(begin,end);//删除begin到end区间的元素
list_test.clear();//清空链表
list_test.remove(e);//删除与e相同元素的节点
- 数据读取
只能直接获取头部和尾部的元素,因为不是在存储结构上并不是一段连续的存储空间
list_test.front();//返回链表的第一个元素
list_test.back();//返回链表的最后一个元素
- 大小操作
list_test.empty();//判断容器是否为空
list_test.size();//返回容器的元素个数
list_test.resize(size);//重设容器大小
list_test.resize(size,elem);//重设容器大小,如果当前容器小于新容器大小,其余位置用elem填充
- 反转和排序
list_test.reverse();//反转链表
list.sort();//排序,默认是升序
//如果需要实现降序,可以自定义一个降序操作
static bool cmp(int value1,int value2){
return value1>value2;//降序
return value1<value2;//升序
}
//如果需要排序的元素是结构体,则采用结构体中的具体元素进行比较
static bool cmp(struct1 a,struct2 b){
if(a[0]==b[0]) a[1]<b[1]; //如果第一个元素一致,则用第二个元素
return a[0]<b[0];//用第一个元素排序}