介绍
list是一个类似于双向带头循环链表的序列式容器,是一个可以在常数时间范围内任意位置进行插入删除的容器。list与forward_list十分相似,但是forward_list本质上是一个单链表,因此也更简单高效。list不支持随机访问,需要通过从头部或者尾部迭代到该位置,其次list的每个节点不仅仅只有数据内容,还包含了指向前后位置的关联信息
接口
构造函数
函数 | 说明 |
---|
list(size_type n, const value_type& val = value_type()) | 构造n个val |
list() | 空list |
list(const list& x) | 拷贝构造 |
list(InputIterator first, InputIterator last) | 区间构造 |
迭代器
这里迭代器的结构比较复杂,暂时将迭代器理解为指针即可
函数 | 说明 |
---|
begin,end | 返回第一个元素的迭代器,返回最后一个元素下一个位置的迭代器 |
rbegin,rend | 返回最后一个元素的迭代器,返回第一个元素前一个位置的迭代器 |
- begin和end为正向迭代器,++操作之后迭代器向后移动
- rbegin和rend为反向迭代器,++操作之后迭代器向前移动
内存
函数 | 说明 |
---|
empty | 判空 |
size | 返回list中有效节点的个数 |
元素获取
函数 | 说明 |
---|
front | 返回list中第一个节点中值的引用 |
back | 返回list中最后一个节点中值的引用 |
增删查改
函数 | 说明 |
---|
push_front | 首元素之前插入val的元素 |
pop_front | 删除首元素 |
push_back | 尾元素之后插入val的元素 |
pop_back | 删除尾元素 |
insert | 在pos位置插入val |
erase | 删除pos的元素 |
swap | 交换两个list的元素 |
clear | 清空list中的有效元素 |
list的迭代器失效
这里的迭代器类似于野指针,与vector不同的是,list类似于双向带头循环链表,因此插入操作不会导致迭代器失效,只有在删除的时候才会失效,并且只有指向该节点的迭代器失效,其他迭代器并不会受到影响