STL基础序列式容器之forward_list

Posted echizen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL基础序列式容器之forward_list相关的知识,希望对你有一定的参考价值。

参照自文档http://www.cplusplus.com/reference/array/,教程http://c.biancheng.net/view/6688.html,和书籍《STL源码剖析》(侯捷)

定义:

template < class T, class Alloc = allocator<T> > class forward_list;

forward_list的底层实现和 list 容器一样,采用的也是链表结构,只不过 forward_list 使用的是单链表,而 list 使用的是双向链表。

forward_list 容器具有和 list 容器相同的特性,即擅长在序列的任何位置进行插入元素或删除元素的操作,但对于访问存储的元素,没有其它容器(如 array、vector)的效率高。效率高是选用 forward_list 而弃用 list 容器最主要的原因,换句话说,只要是 list 容器和 forward_list 容器都能实现的操作,应优先选择 forward_list 容器。

使用需要引入头文件<forward_list>和使用std命名空间。

(一)初始化

方式一:创建了一个空的 forward_list容器。

std::forward_list<int> values;

方式二:创建一个包含 n 个元素的 forward_list 容器,此时这二十个元素都被初始化为0。

std::forward_list<int> values(20);

方式三:创建并指定元素个数和初始化值,此时这十个元素都被初始化为5。

std::forward_list<int> values(10, 5);

方式四:直接拷贝其他的forward_list。

std::forward_list<int> value1(10);
std::forward_list<int> value2(value1);

也可以选择性复制一部分元素(利用迭代器函数)。

std::array<int, 5>arr{ 11,12,13,14,15 };
std::forward_list<int>values(arr.begin()+2, arr.end());//拷贝arr容器中的{13,14,15}

(二)迭代器函数

  • before_begin():返回一个前向迭代器,其指向容器中第一个元素之前的位置。
  • begin():返回一个前向迭代器,其指向容器中第一个元素的位置。
  • end():返回一个前向迭代器,其指向容器中最后一个元素之后的位置。
  • cbefore_begin():和 before_begin() 功能相同,只不过在其基础上增加了 const 属性,不能用于修改元素。
  • cbegin()、cend():依此类推
    技术图片

(三) 容量函数

  • max_size():返回元素个数的最大值。这通常是一个很大的值,一般是 2^32-1,所以我们很少会用到这个函数。
  • empty():判断容器是否为空。

(四)元素访问函数

  • front():返回容器中第一个元素的直接引用,可以用于修改元素,但是也只能修改第一个元素。

(五)修改器函数

  • assign():用新元素替换原有内容。
  • emplace_front():在容器首个元素前直接生成新的元素。
  • push_front():在容器头部生成一个元素。该函数和 push_front() 的功能相同,但效率更高。
  • pop_front():删除容器头部的一个元素。
  • emplace_after():在指定位置之后插入一个新元素,并返回一个指向新元素的迭代器。和 insert_after() 的功能相同,但效率更高。
  • insert_after():在指定位置之后插入一个新元素,并返回一个指向新元素的迭代器。
  • splice_after():将某个 forward_list 容器中指定位置或区域内的元素插入到另一个容器的指定位置之后。
  • erase_after():删除容器中某个指定位置或区域内的所有元素。
  • swap():交换两个容器的所有元素。
  • resize():调整容器的大小。
  • remove(val):删除容器中所有等于val的元素。
  • remove_if():删除容器中满足条件的元素。
  • clear():移除所有的元素。
  • unique():删除容器中相邻的重复元素,只保留一份。
  • merge():合并两个事先已排好序的 forward_list 容器,并且合并之后的容器依然是有序的。
  • sort():通过更改容器中元素的位置,将它们进行排序。
  • reverse():反转容器中元素的顺序。


以上是关于STL基础序列式容器之forward_list的主要内容,如果未能解决你的问题,请参考以下文章

C++之map和set总结

STL map&set用法详解

STL map&set用法详解

STL学习笔记--4序列式容器之vector

STL序列式容器之list

map和set等关联式容器的使用