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

一、创建与初始化

  • 引入 <forward_list> 并使用 std 命名空间
cpp 复制代码
#include <forward_list>

using namespace std;
  1. 创建一个空 forward_list
cpp 复制代码
forward_list<int> fl;
  1. 创建一个包含 5 个元素,每个元素初始化为 0 的 forward_list
cpp 复制代码
forward_list<int> fl(5);
  1. 创建一个包含 5 个元素,每个元素初始化为 100 的 forward_list
cpp 复制代码
forward_list<int> fl(5, 100);
  1. 初始化 forward_list
cpp 复制代码
forward_list<int> fl = { 1, 2, 3 };

二、元素访问

  • 只能直接访问第一个元素
cpp 复制代码
#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 是否为空
cpp 复制代码
#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() 方法,需要手动计算
cpp 复制代码
#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

四、元素遍历

cpp 复制代码
#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. 在头部插入元素
cpp 复制代码
#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
cpp 复制代码
#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. 在指定位置后插入元素
cpp 复制代码
#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
cpp 复制代码
#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. 删除头部元素
cpp 复制代码
#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. 删除指定位置后的元素
cpp 复制代码
#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
cpp 复制代码
#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
-----
相关推荐
小呆呆6667 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
Dovis(誓平步青云)7 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
周杰伦fans7 小时前
8GB显存下模型量化实战指南
人工智能·后端·c#
sunshine22 girl7 小时前
Java学习六 Java常见API-2--String-3-字符串的截取替换和其他方法
java·开发语言·学习
LOVE️YOU8 小时前
Python 函数名、函数对象与“把函数作为参数传递”
开发语言·python
小蒜学长8 小时前
基于SpringBoot的佳新超市管理系统设计与实现系统(代码+数据库+LW)
java·数据库·spring boot·后端·佳新超市管理系统
sunshine22 girl8 小时前
Java学习六 Java常见API-1-Radom随机数
java·开发语言·学习
可乐鸡翅yeah_8 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒8 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
潼心1412o9 小时前
C++初阶(长期更新)第6讲:类和对象(下)
开发语言·c++·算法