当前位置: 首页 > news >正文

C++ - 数据容器之 forward_list(创建与初始化、元素访问、容量判断、元素遍历、添加元素、删除元素)

一、创建与初始化

  • 引入 <forward_list> 并使用 std 命名空间
#include <forward_list>using namespace std;
  1. 创建一个空 forward_list
forward_list<int> fl;
  1. 创建一个包含 5 个元素,每个元素初始化为 0 的 forward_list
forward_list<int> fl(5);
  1. 创建一个包含 5 个元素,每个元素初始化为 100 的 forward_list
forward_list<int> fl(5, 100);
  1. 初始化 forward_list
forward_list<int> fl = { 1, 2, 3 };

二、元素访问

  • 只能直接访问第一个元素
#include <iostream>
#include <forward_list>using namespace std;int main() {forward_list<int> fl = { 1, 2, 3 };int result = fl.front();cout << "第一个元素:" << result << endl;return 0;
}

三、容量判断

  1. 获取 forward_list 是否为空
#include <iostream>
#include <forward_list>using namespace std;int main() {forward_list<int> fl = { 10, 20, 30 };if (fl.empty()) {cout << "forward_list 是空的" << endl;}else {cout << "forward_list 不为空" << endl;}return 0;
}
# 输出结果forward_list 不为空
  1. 由于没有 size() 方法,需要手动计算
#include <iostream>
#include <forward_list>using namespace std;int main() {forward_list<int> fl = { 1, 2, 3, 4, 5 };size_t count = distance(fl.begin(), fl.end());cout << "元素数量:" << count << endl;return 0;
}
# 输出结果元素数量:5

四、元素遍历

#include <iostream>
#include <forward_list>using namespace std;int main() {forward_list<int> fl = { 1, 2, 3, 4, 5 };for (auto it = fl.begin(); it != fl.end(); ++it) {cout << *it << endl;}return 0;
}
# 输出结果1
2
3
4
5

五、添加元素

  1. 在头部插入元素
#include <iostream>
#include <forward_list>using namespace std;int main() {forward_list<int> my_list = { 1, 2, 3 };for (int val : my_list) {cout << val << endl;}cout << "-----" << endl;my_list.push_front(4);for (int val : my_list) {cout << val << endl;}return 0;
}
# 输出结果1
2
3
-----
4
1
2
3
#include <iostream>
#include <forward_list>using namespace std;int main() {forward_list<int> my_list = { 1, 2, 3 };for (int val : my_list) {cout << val << endl;}cout << "-----" << endl;my_list.emplace_front(4);for (int val : my_list) {cout << val << endl;}return 0;
}
# 输出结果1
2
3
-----
4
1
2
3
  1. 在指定位置后插入元素
#include <iostream>
#include <forward_list>using namespace std;int main() {forward_list<int> my_list = { 1, 2, 3 };for (int val : my_list) {cout << val << endl;}cout << "-----" << endl;// 在第 2 个元素后插入auto it = my_list.begin();advance(it, 1);my_list.insert_after(it, 4);for (int val : my_list) {cout << val << endl;}return 0;
}
# 输出结果1
2
3
-----
1
2
4
3
#include <iostream>
#include <forward_list>using namespace std;int main() {forward_list<int> my_list = { 1, 2, 3 };for (int val : my_list) {cout << val << endl;}cout << "-----" << endl;// 在第 2 个元素后插入auto it = my_list.begin();advance(it, 1);my_list.emplace_after(it, 4);for (int val : my_list) {cout << val << endl;}return 0;
}
# 输出结果1
2
3
-----
1
2
4
3

六、删除元素

  1. 删除头部元素
#include <iostream>
#include <forward_list>using namespace std;int main() {forward_list<int> my_list = { 1, 2, 3 };for (int val : my_list) {cout << val << endl;}cout << "-----" << endl;my_list.pop_front();for (int val : my_list) {cout << val << endl;}return 0;
}
  1. 删除指定位置后的元素
#include <iostream>
#include <forward_list>using namespace std;int main() {forward_list<int> my_list = { 1, 2, 3 };for (int val : my_list) {cout << val << endl;}cout << "-----" << endl;// 删除第 1 个元素后的元素auto it = my_list.begin();my_list.erase_after(it);for (int val : my_list) {cout << val << endl;}return 0;
}
# 输出结果1
2
3
-----
1
3
  1. 清空 forward_list
#include <iostream>
#include <forward_list>using namespace std;int main() {forward_list<int> my_list = { 1, 2, 3 };for (int val : my_list) {cout << val << endl;}cout << "-----" << endl;my_list.clear();for (int val : my_list) {cout << val << endl;}return 0;
}
# 输出结果1
2
3
-----
http://www.dtcms.com/a/170113.html

相关文章:

  • 方案解读:华为-智慧园区数字平台技术方案【附全文阅读】
  • systemd-notify(linux服务状态通知消息)
  • 如何基于HAL库进行STM32开发
  • 模拟SIP终端向Freeswitch注册用户
  • 一键部署自己的私域直播
  • 具身系列——PPO算法实现CartPole游戏(强化学习)
  • operator 可以根据需要重载 == 运算符进行比较
  • Cadence高速系统设计工具
  • 0基础 | STM32 | TB6612电机驱动使用
  • DeepSeek辅助学术写作之提交和出版以及评审过程分析提示词分享祝你顺利毕业~
  • 肥胖风险的多类预测——CatBoost模型的89%
  • Y1——树状数组入门
  • 每天一道面试题@第五天
  • 推理能力:五一模型大放送
  • C# 运算符重载深度解析:从基础到高阶实践
  • 第3章 Python 3 基础语法001
  • 大模型:解码人工智能的算力革命与边界突破
  • Go反射-通过反射调用结构体的方法(带入参)
  • Spring 容器相关的核心注解​
  • xLua笔记
  • 【2025年】MySQL面试题总结
  • 【Java学习】关于springBoot的自动配置和起步依赖
  • 【深度学习-Day 4】掌握深度学习的“概率”视角:基础概念与应用解析
  • re题(53)BUUCTF-[ACTF新生赛2020]SoulLike
  • fastapi+vue中的用户权限管理设计
  • 从零开始理解 C++ 后端编程中的分布式系统
  • word怎么删除空白页?word最后一页删不掉怎么办
  • 网络通信领域的基础或流行协议
  • 重载和覆写有什么区别?
  • 开源项目实战学习之YOLO11:ultralytics-cfg-models-nas(十)