【C++】std::forward_list

std::forward_list:

std::forward_list 是 C++ 标准库中的一个单向链表容器。与 std::list 相比,std::forward_list 只允许单向遍历,即只能从前往后访问元素。它的实现比 std::list 更轻量,因此在内存和性能方面通常更优,但缺少双向访问的能力。

特性

  1. 单向链表 : std::forward_list 只包含指向下一个元素的指针,不包含指向前一个元素的指针。
  2. 非随机访问 : 与 std::list 相同,不支持通过下标访问元素。
  3. 动态大小: 容器大小可以动态调整。
  4. 稳定的迭代器: 除了被删除的迭代器,其余迭代器在插入和删除操作后保持有效。

常用操作

1. 创建和初始化
cpp 复制代码
#include <forward_list>
#include <iostream>

int main() {
    // 创建一个空的 forward_list
    std::forward_list<int> fwd_lst1;

    // 创建一个初始化为 5 个元素的 forward_list,元素值为 10
    std::forward_list<int> fwd_lst2(5, 10);

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

    return 0;
}
2. 访问和修改元素
cpp 复制代码
#include <forward_list>
#include <iostream>

int main() {
    std::forward_list<int> fwd_lst = {1, 2, 3, 4, 5};

    // 使用迭代器遍历 forward_list
    for (auto it = fwd_lst.begin(); it != fwd_lst.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    // 修改元素
    auto it = fwd_lst.begin();
    ++it; // 移动到第二个元素
    *it = 20;

    std::cout << "Modified list: ";
    for (const auto& elem : fwd_lst) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    return 0;
}

3. 添加和删除元素:

cpp 复制代码
#include <forward_list>
#include <iostream>

int main() {
    std::forward_list<int> fwd_lst = {1, 2, 3, 4, 5};

    // 在前面添加元素
    fwd_lst.push_front(0);

    // 删除前面元素
    fwd_lst.pop_front();

    std::cout << "List after push and pop operations: ";
    for (const auto& elem : fwd_lst) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    return 0;
}

4. 插入和删除指定位置的元素

cpp 复制代码
#include <forward_list>
#include <iostream>

int main() {
    std::forward_list<int> fwd_lst = {1, 2, 3, 4, 5};

    // 插入元素
    auto it = fwd_lst.before_begin(); // 指向第一个元素的前面
    fwd_lst.insert_after(it, 10); // 在第一个元素前插入 10

    // 删除指定位置的元素
    it = fwd_lst.begin();
    fwd_lst.erase_after(it); // 删除第一个元素

    std::cout << "List after insert and erase operations: ";
    for (const auto& elem : fwd_lst) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    return 0;
}
5. 其他常用方法
  • size() : 返回 forward_list 中元素的数量。
  • empty() : 判断 forward_list 是否为空。
  • clear() : 清空 forward_list 中的所有元素。
  • front() : 访问 forward_list 的第一个元素。
  • resize() : 不适用于 forward_list,因为不支持随机访问。
相关推荐
FL16238631291 小时前
Halcon26.05下载安装教程
windows
ly76891 小时前
Windows 操作系统详解:从系统架构、文件管理到安全与运维
windows·安全·系统架构
2601_962364971 小时前
踩坑提醒!带摄像头≠支持 Windows Hello 人脸解锁
windows
码农爱学习3 小时前
ClaudeCode搭配DeepSeek在Windows和Linux中的安装教程
linux·运维·windows
WA内核拾荒者1 天前
WhatsApp账号运营SOP的可视化编排与流水线监控
大数据·数据库·windows
Java小白笔记1 天前
Windows系统免软件命令激活
java·网络·人工智能·windows·ai·ai编程
IT小盘1 天前
17-AI应用防止越权访问知识库
服务器·网络·windows
rust&python1 天前
通达信量化tdxquant快速开始第一个策略
windows·量化·通达信·tdxquant
Albart5751 天前
Windows快速访问幽灵文件夹彻底解决|清除tmp残留_无效固定项_侧边栏残留(Win10_Win11通用)
windows·powershell脚本·快速访问修复·幽灵文件夹清理·tmp垃圾清除·电脑系统优化
clorinda1 天前
把 DeepSeek Harness 打包成类似 Codex 的 Windows 桌面应用:Electron、一键启动、插件管理和动态壁纸
前端·javascript·windows·electron