简介
在C++11中,引入了 forward_list 容器,在某些程度上替代了 list 的作用
forward_list 支持从容器的任何位置插入和移除元素
forward_list 本质为单链表,且实质上与其C实现相比无任何开销
forward_list是序列式容器,但不支持随机访问
类模板
1 | template< |
成员函数
迭代器相关
- begin() - 返回指向 forward_list 第一个元素的迭代器
- end() - 返回指向 forward_list 中最后一个元素之后的理论元素的迭代器
- before_begin() - 返回指向 forward_list 首元素前一元素的迭代器
- cbefore_begin() – 返回指向 forward_list 首元素前一元素的const迭代器
- cbegin() - 返回指向 forward_list 中第一个元素的const迭代器
- cend() - 返回一个const迭代器,指向 forward_list 中最后一个元素之后的理论元素
容量相关
- max_size() - 返回 forward_list 可以容纳的最大元素数 O(1)
- resize() - 调整 forward_list 可存储数量
- empty() - 当前 forward_list 是否为空 O(1)
元素访问相关
- front() - 返回对 forward_list 中第一个元素的引用 O(1)
修改器相关
- assgin() - 用新的容器替换此容器
- clear() - 清空所有元素,size()置 0
- insert_after() - 插入一个或多个元素到某个元素之后
- erase_after() - 删除指定位置之后的元素
- push_front() - 头部插入元素 O(1)
- pop_front() - 删除头部元素 O(1)
- swap() - 交换元素
- emplace_after() - 插入一个元素到尾部,调用构造函数 (C++11)
容器操作
- merge() - 合并两个 forward_list
- splice_after() - 从一个 forward_list 中移动元素
- remove() & remove_if() - 移除满足要求的元素
- reverse() - 反转 forward_list
- unique() - 删除重复的元素
- sort() - 对 forward_list 进行排序
list迭代器详解
forward_list 的所有迭代器都是正向迭代器
- 正向迭代器
此迭代器是由 begin(), end(), before_begin() 所返回的,其对其的操作为正向,且当 deque 元素不为 const 时可以更改其指向的值,即:
1 | forward_list<int> v{ 1,2,3,4,5,6 }; |
- 常量正向迭代器
此迭代器由 cbegin(), cend(), cbefore_begin() 返回,只能对其操作,不能更改其指向的值,即:
1 | forward_list<int> v{ 1,2,3,4,5,6 }; |
forward_list的特性
与 list 相比,forward_list 不需要在双向迭代器时可以更有效的利用空间的存储