【C++之STL】014序列容器篇forward_list的优缺点以及构造函数

文章目录

介绍

序列容器forward_list的优缺点如下:

  • 优点。forward_list具有插入、删除表项速度快、消耗内存空间少的特点,因此被广泛用于排序算法1。
  • 缺点。forward_list只能向前遍历,不能在常量时间内随机访问任意成员,对成员的访问需要线性时间代价;存储链接信息需要消耗内存,特别是当包含大量的小规模成员时;forward_list出于效率考虑,有意不提供size()成员函数,获取forward_list所包含的成员个数需要用std::distance(_begin, _end)算法。

构造函数

std::forward_list 是 C++ 标准库中的一个模板类,它提供了一个单向链表数据结构。std::forward_list 提供了多种构造函数,用于创建和初始化链表。下面是一些常用的 std::forward_list 构造函数的声明以及详细用法:
默认构造函数

forward_list();

用法

创建一个空的 forward_list。

std::forward_list<int> empty_list; // 创建一个空的 forward_list

构造函数,使用迭代器

template< class InputIt >
forward_list( InputIt first, InputIt last );

用法

使用迭代器范围来初始化 forward_list。first 和 last 是指向要复制元素的输入范围的迭代器。

std::vector<int> vec = {1, 2, 3, 4, 5};
std::forward_list<int> fl(vec.begin(), vec.end()); // 使用 vector 初始化 forward_list

构造函数,使用元素数量

explicit forward_list( size_type count );

用法

创建一个包含 count 个默认构造的元素的 forward_list。

std::forward_list<int> int_list(5); // 创建一个包含 5 个默认构造的 int 元素的 forward_list

构造函数,使用元素数量和值

forward_list( size_type count, const value_type& value );

用法

创建一个包含 count 个具有给定值 value 的元素的 forward_list。

std::forward_list<int> int_list(10, 42); // 创建一个包含 10 个值为 42 的 int 元素的 forward_list

构造函数,使用另一个 forward_list

forward_list( const forward_list& other );
forward_list( forward_list&& other ) noexcept;

用法

使用另一个 forward_list 对象来初始化一个新的 forward_list。第一个构造函数执行拷贝初始化,而第二个构造函数执行移动初始化。

std::forward_list<int> first_list = {1, 2, 3};
std::forward_list<int> copy_list(first_list); // 拷贝初始化
std::forward_list<int> move_list(std::move(first_list)); // 移动初始化

构造函数,使用初始化列表

forward_list( std::initializer_list<value_type> init );

用法

使用 C++11 引入的初始化列表来初始化 forward_list。

std::forward_list<int> init_list{1, 2, 3, 4, 5}; // 使用初始化列表初始化 forward_list

注意事项

  • forward_list 提供了前向迭代器,因此你可以使用任何接受前向迭代器的构造函数来初始化它。
  • forward_list 的所有构造函数都是 explicit 的,这意味着你不能隐式地从一个不同类型的容器构造 forward_list。
  • forward_list 的构造函数不会抛出异常(除了内存分配失败),因此它们可以被标记为 noexcept(对于不抛出异常的版本)。
  • 自定义比较函数或 lambda 表达式应该定义严格的弱序(strict weak ordering),以保证排序的正确性。

使用这些构造函数,你可以方便地创建和初始化 std::forward_list 对象,以满足你的需求。

  • 22
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊猫Devin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值