首页 > 编程笔记 > C++笔记 阅读:5

C++ std::forward_list容器的用法(附带实例)

forward_list 容器定义在 <forward_list> 头文件中,并位于命名空间 std 中。因此,使用该容器前需先引入 <forward_list> 头文件,并使用 std 命令空间:
#include <forward_list>
using namespace std;

与 list 对象相似,forward_list 对象的创建方法也有 5 种:
1) 创建空的 forward_list 对象,语法格式如下:
std::forward_list<type> name;
例如,创建一个可容纳 int 型元素的空对象 intlist,代码如下:
std::forward_list<int> intlist;

2) 创建一个大小为 size 的 forward_list 对象,语法格式如下:
std::forward_list <type> name(size);

3) 创建一个大小为 size 的 forward_list 对象,并将各元素值初始化为 value,语法格式如下:
std::forward_list <type> name(size,value);

4) 使用复制构造函数,通过已有的 forward_list 对象创建新的对象,语法格式如下:
std::forward_list <type> name(mylist);

5) 创建元素在指定范围内的链表,first 代表起始位置,last 代表结束位置,语法格式如下:
std::forward_list <type> name(first,last);

forward_list 容器的成员函数见下表:

函数 说明
begin() 返回指向序列第一个元素的迭代器
end() 返回指向序列最后一个元素的迭代器
before_begin() 返回指向第一个元素前面一个位置的迭代器
cbegin() 与begin()类似,但增加了const属性,不能修改元素的值
cend() 与end()类似,但增加了const属性,不能修改元素的值
cbefore_begin() 与before_begin()类似,但增加了const属性,不能修改元素的值
assign() 用新元素替换原有内容
operator=() 复制同类型容器的元素,或者用初始化列表替换现有内容
max_size() 返回 STL 允许的最大容量,一般为 2^32-1,该函数很少用到
resize() 重新设定序列的大小
empty() 判断序列是否为空。如果为空,返回 true;否则返回 false
front() 返回对序列第一个元素的引用
push_front() 在序列起始位置添加一个元素
emplace_after() 在指定位置的后面生成一个元素
emplace_front() 在序列的起始位置生成一个元素
insert_after() 在指定位置的后面插入一个或多个元素
pop_front() 移除序列头部的元素
reverse() 反转某一段元素
erase_after() 移除指定位置后面的一个元素或一段元素
remove() 移除所有和参数匹配的元素
remove_if() 移除满足函数条件的所有元素
unique() 移除所有连续重复的元素
clear() 移除所有的元素,序列大小变为 0
swap() 交换两个序列的所有元素
sort() 对元素进行排序
merge() 合并两个有序序列
splice_after() 移动指定位置后面的所有元素到另一个同类型的 list 中

下面的代码中演示了一些 forward_list 容器的成员函数用法:
#include <iostream>
#include <forward_list>
using namespace std;

int main()
{
    std::forward_list<int> values = {1, 2, 3};      // 创建一个 forward_list,初始为 [1, 2, 3]
    values.emplace_front(4);                        // 在序列起始位置生成新元素 4,此时序列为 [4, 1, 2, 3]
    values.emplace_after(values.before_begin(), 5); // 在序列起始位置生成新元素 5,此时序列为 [5, 4, 1, 2, 3]
    values.reverse();                               // 反转 values,此时元素序列为 [3, 2, 1, 4, 5]
    for (auto it = values.begin(); it != values.end(); ++it)
    {
        cout << *it << " ";
    }
    return 0;
}
运行结果为:

3 2 1 4 5

相关文章