STL-forward_list

简介

C++11中,引入了 forward_list 容器,在某些程度上替代了 list 的作用

forward_list 支持从容器的任何位置插入和移除元素

forward_list 本质为单链表,且实质上与其C实现相比无任何开销

forward_list是序列式容器,但不支持随机访问

类模板

1
2
3
4
template<
class T, //数据类型
class Allocator = std::allocator<T> //分配器
> class forward_list;

成员函数

迭代器相关

  1. begin() - 返回指向 forward_list 第一个元素的迭代器
  2. end() - 返回指向 forward_list 中最后一个元素之后的理论元素的迭代器
  3. before_begin() - 返回指向 forward_list 首元素前一元素的迭代器
  4. cbefore_begin() – 返回指向 forward_list 首元素前一元素的const迭代器
  5. cbegin() - 返回指向 forward_list 中第一个元素的const迭代器
  6. cend() - 返回一个const迭代器,指向 forward_list 中最后一个元素之后的理论元素

容量相关

  1. max_size() - 返回 forward_list 可以容纳的最大元素数 O(1)
  2. resize() - 调整 forward_list 可存储数量
  3. empty() - 当前 forward_list 是否为空 O(1)

元素访问相关

  1. front() - 返回对 forward_list 中第一个元素的引用 O(1)

修改器相关

  1. assgin() - 用新的容器替换此容器
  2. clear() - 清空所有元素,size()置 0
  3. insert_after() - 插入一个或多个元素到某个元素之后
  4. erase_after() - 删除指定位置之后的元素
  5. push_front() - 头部插入元素 O(1)
  6. pop_front() - 删除头部元素 O(1)
  7. swap() - 交换元素
  8. emplace_after() - 插入一个元素到尾部,调用构造函数 (C++11)

容器操作

  1. merge() - 合并两个 forward_list
  2. splice_after() - 从一个 forward_list 中移动元素
  3. remove() & remove_if() - 移除满足要求的元素
  4. reverse() - 反转 forward_list
  5. unique() - 删除重复的元素
  6. sort() - 对 forward_list 进行排序

list迭代器详解

forward_list 的所有迭代器都是正向迭代器

  1. 正向迭代器
    此迭代器是由 begin(), end(), before_begin() 所返回的,其对其的操作为正向,且当 deque 元素不为 const 时可以更改其指向的值,即:
1
2
3
4
forward_list<int> v{ 1,2,3,4,5,6 };
auto i = v.begin(); //*i为1
i++; //*i为2
*i = 100; //*i为100
  1. 常量正向迭代器
    此迭代器由 cbegin(), cend(), cbefore_begin() 返回,只能对其操作,不能更改其指向的值,即:
1
2
3
4
forward_list<int> v{ 1,2,3,4,5,6 };
auto i = v.cbegin();//*i为1
i++; //*i为2
*i = 100; //error!

forward_list的特性

与 list 相比,forward_list 不需要在双向迭代器时可以更有效的利用空间的存储