list容器
1、功能:将数据进行链式存储。
2、链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。
3、链表的组成:链表由一系列节点组成。
节点的组成:一个是存储数据元素的数据域,另一个是存储下一个节点的指针域。
4、STL中的链表是一个双向循环链表。
5、由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代器。
6、list的优点:
- 采用动态存储分配,不会造成内存浪费和溢出
- 链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素
7、list与vector对比:STL中list与vector是两个最常被使用的容器,各有优缺点。
8、list构函数
- 功能描述:创建list容器
- 函数原型:
list<T> list; //list采用模板类实现对象的默认构造形式
list(beg, end); //构造函数将[beg, end]区间中的元素拷贝给本身
list(n, elem); //构造函数将n个elem拷贝给本身
list(const list &lst); //拷贝构造函数
9、list赋值与交换
- 功能描述:给list容器进行赋值,以及交换list容器
- 函数原型:
assign(beg, end); //将[beg, end]区间中的数据拷贝赋值给本身
assign(n, elem); //将n个elem拷贝赋值给本身
list& operator=(const list &lst); //重载等号操作符
swap(lst); //将list与本身的元素互换
10、list大小操作
- 功能描述:对list容器的大小进行操作
- 函数原型:
size(); //返回容器中元素的个数
empty(); //判断容器是否为空
resize(num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置;
//若果容器变短,则末尾超出容器长度的元素被删除
resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem填充新位置;
//若果容器变短,则末尾超出容器长度的元素被删除
- 总结:
判断是否为空——empty
返回元素个数——size
重新指定个数——resize
11、list插入和删除
- 功能描述:对list容器进行数据的插入和删除。
- 函数原型:
push_back(elem); //在容器尾部加入一个元素
pop_back(); //删除容器中最后一个元素
push_front(elem); //在容器开头插入一个元素
pop_front(); //从容器开头移除第一个元素
insert(pos, elem); //在pos位置插elem元素的拷贝,返回新数据的位置
insert(pos, n, elem); //在pos位置插入n个elem数据,无返回值
insert(pos, beg, end); //在pos位置插入[beg, end]区间的数据,无返回值
clear(); //移除容器的所有数据
erase(beg, end); //删除[beg, end]区间的数据,返回下一个数据的位置
erase(pos); //删除pos位置的数据,返回下一个数据的位置
remove(elem); //删除容器中所有与elem值匹配的元素
- 总结:
尾插——push_back
尾删——pop_back
头插——push_front
头删——pop_front
插入——insert
删除——erase
移除——remove
清空——clear
12、list数据存取
- 功能描述:对list容器中数据进行存取。
- 函数原型:
front(); //返回第一个元素
back(); //返回最后一个元素
- 总结:
list容器中不可以通过[]或者at方式访问数据
返回第一个元素——front
返回最后一个元素——back
13、list反转和排序
- 功能描述:将容器中的元素反转,以及将容器中的数据进行排序。
- 函数原型:
reverse(); //反转链表
sort(); //链表排序