正确认识list
STL(Standard Template Library)是C++中的一个重要库,它提供了一组通用的模板类和函数,用于实现常用的数据结构和算法。其中,STL list是STL库中的一个双向链表容器类。
list是一个线性顺序容器,它以节点的形式存储元素,每个节点都包含一个值和指向前一个节点和后一个节点的指针。与数组和向量(vector)不同,list的插入和删除操作复杂度为O(1),不受容器大小的影响。然而,由于没有随机访问的能力,访问和遍历list的操作复杂度为O(n)。
总之,STL list是一个灵活、高效的双向链表容器,适用于需要频繁插入和删除元素的场景,提供了一系列方便的操作函数和迭代器,方便使用者进行元素的管理和操作。
list的优缺点
- list的底层采用的是双向链表结构,可以通过节点找到前一个元素和后一个元素
- 和其他容器相比,list的插入删除效率更好
- list不支持随机访问,只能从头部或者尾部迭代到该位置
- list可以在任意位置进行插入删除
list的常用接口
list的构造
构造函数(constructor) | 接口说明 |
---|
list(size_type n,const value_type& val=value_type()) | 构造的list中包含n个值为val的元素 |
list() | 构造空的list |
list(const list&x) | 构造拷贝函数 |
list(InputIterator first,InputIterator last) | 用(first,last)区间中的元素构造list |
list iterator的使用
函数声明 | 接口说明 |
---|
begin+end | 返回第一个元素的迭代器+返回最后一个元素下一个位置的迭代器 |
rbegin+rend | 返回第一个元素的reverse_iterator,即end位置,返回最后一个元素下一个位置的reverse_iterator,即begin位置 |
正、反向迭代器的区别:
- begin与end为正向迭代器,对迭代器执行++操作,迭代器向后移动
- rbegin与rend为反向迭代器,对迭代器执行++操作,迭代器向前移动
- 正向迭代器和反向迭代器对称
list capacity
函数声明 | 接口说明 |
---|
empty | 检测list是否为空,是返回true,否返回false |
size | 返回list中有效节点的个数 |
list element access
函数声明 | 接口说明 |
---|
front | 返回list的第一个节点中值的引用 |
back | 返回list的最后一个节点中值的引用 |
list modifiers
函数声明 | 接口说明 |
---|
push_front | 在list首元素前插入值为val的元素 |
pop_front | 删除list中第一个元素 |
push_back | 在list尾部插入值为val的元素 |
pop_back | 删除list中最后一个元素 |
insert | 在list position位置中插入值为val的元素 |
erase | 删除list position位置的元素 |
swap | 交换两个list中的元素 |
clear | 清空list中的有效元素 |