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的主要内容,如果未能解决你的问题,请参考以下文章