list将数据进行链式存储
链表是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的
链表的组成:链表由一系列节点组成
结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域
链表优点:可以对任意位置进行快速插入或删除元素
缺点:容器遍历速度,没有数组快;占用空间比数组大
STL中的链表是一个双向循环链表
每一个结点有两个指针,指向后面和前面
因为链表存储不是连续的内存空间,因此list迭代器只支持前移和后移,属于双向迭代器
list优点:
采用动态存储分配,不会造成内存浪费和溢出
链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素
list缺点:
list有一个重要的性质,插入操作和删除操作都不会造成原有list迭代器的失效,这在vector中是不成立的
STL中list和vector是两个最常被使用的容器,各有优缺点
list构造函数
默认,区间,n个elem,拷贝
与其他相似
list赋值与交换
assign(begin,end);
assign(n,elem)
等号赋值 l1=l2
swap互换元素
list大小操作
size()
empty()
resize(num)
resize(num,elem)
list插入和删除
list数据存取
front()
back()
没有at()和中括号的访问方式,由于是链表,不是连续线性空间,所以迭代器不支持随机访问,只能++,-- ,不可以+1
list反转和排序
将容器中的元素反转,以及将容器中的数据进行排序
reverse();反转链表
sort();链表排序,由于不支持随机访问,所以不可以用标准算法
不支持随机访问迭代器的容器,内部会提供对应的一些算法
使用的时候是L1.sort();默认从小到大
从大到小
bool compa(int a,int b)
{
降序则return a>b;
}
L1.sort(compa);
自定义类型必须要指定排序规则
如person
bool compareperson(person &p1,person &p2)
{
if(p1.age==p2.age)return p1.height>p2.height;
return p1.age<p2.age;
}