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

一、创建与初始化

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

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

二、元素访问

  • 首尾元素访问
cpp 复制代码
#include <iostream>
#include <list>

using namespace std;

int main() {

	list<int> my_list = { 10, 20, 30 };

	int result1 = my_list.front();

	cout << "第一个元素:" << result1 << endl;

	int result2 = my_list.back();

	cout << "最后一个元素:" << result2 << endl;

	return 0;
}
复制代码
# 输出结果

第一个元素:10
最后一个元素:30

三、容量判断

  1. 获取 list 的大小
cpp 复制代码
#include <iostream>
#include <list>

using namespace std;

int main() {

	list<int> my_list = { 10, 20, 30 };

	cout << "大小:" << my_list.size() << endl;

	return 0;
}
复制代码
# 输出结果

大小:3
  1. 获取 list 的是否为空
cpp 复制代码
#include <iostream>
#include <list>

using namespace std;

int main() {

	list<int> my_list = { 10, 20, 30 };

	cout << "是否为空:" << (my_list.empty() ? "是" : "否") << endl;

	return 0;
}
复制代码
# 输出结果

四、元素遍历

  1. 正向遍历
cpp 复制代码
#include <iostream>
#include <list>

using namespace std;

int main() {

	list<int> my_list = { 10, 20, 30 };

	for (auto it = my_list.begin(); it != my_list.end(); ++it) {
		cout << *it << endl;
	}

	return 0;
}
复制代码
# 输出结果

10
20
30
  1. 反向遍历
cpp 复制代码
#include <iostream>
#include <list>

using namespace std;

int main() {

	list<int> my_list = { 10, 20, 30 };

	for (auto rit = my_list.rbegin(); rit != my_list.rend(); ++rit) {
		cout << *rit << endl;
	}

	return 0;
}
复制代码
# 输出结果

30
20
10
  1. 范围 for 循环
cpp 复制代码
#include <iostream>
#include <list>

using namespace std;

int main() {

	list<int> my_list = { 10, 20, 30 };

	for (int val : my_list) {
		cout << val << endl;
	}

	return 0;
}
复制代码
# 输出结果

10
20
30

五、添加元素

  1. 在末尾添加元素
cpp 复制代码
#include <iostream>
#include <list>

using namespace std;

int main() {

	list<int> my_list = { 1, 2, 3 };

	for (int val : my_list) {
		cout << val << endl;
	}

	cout << "-----" << endl;

	my_list.push_back(4);

	for (int val : my_list) {
		cout << val << endl;
	}

	return 0;
}
复制代码
# 输出结果

1
2
3
-----
1
2
3
4
  1. 在开头添加元素
cpp 复制代码
#include <iostream>
#include <list>

using namespace std;

int main() {

	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
  1. 在指定位置插入元素
cpp 复制代码
#include <iostream>
#include <list>

using namespace std;

int main() {

	list<int> my_list = { 1, 2, 3 };

	for (int val : my_list) {
		cout << val << endl;
	}

	cout << "-----" << endl;

	auto it = my_list.begin();
	advance(it, 1); // 移动到第 2 个位置
	my_list.insert(it, 5); // 在第 2 个位置插入元素

	for (int val : my_list) {
		cout << val << endl;
	}

	return 0;
}
复制代码
# 输出结果

1
2
3
-----
1
5
2
3

六、删除元素

  1. 删除末尾元素
cpp 复制代码
#include <iostream>
#include <list>

using namespace std;

int main() {

	list<int> my_list = { 1, 2, 3 };

	for (int val : my_list) {
		cout << val << endl;
	}

	cout << "-----" << endl;

	my_list.pop_back();

	for (int val : my_list) {
		cout << val << endl;
	}

	return 0;
}
复制代码
# 输出结果

1
2
3
-----
1
2
  1. 删除开头元素
cpp 复制代码
#include <iostream>
#include <list>

using namespace std;

int main() {

	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
2
3
-----
2
3
  1. 删除指定位置元素
cpp 复制代码
#include <iostream>
#include <list>

using namespace std;

int main() {

	list<int> my_list = { 1, 2, 3 };

	for (int val : my_list) {
		cout << val << endl;
	}

	cout << "-----" << endl;

	auto it = my_list.begin();
	advance(it, 1); // 移动到第 2 个位置
	my_list.erase(it); // 删除第 2 个位置的元素

	for (int val : my_list) {
		cout << val << endl;
	}

	return 0;
}
复制代码
# 输出结果

1
2
3
-----
1
3
  1. 删除(所有等于 5 的元素)元素
cpp 复制代码
#include <iostream>
#include <list>

using namespace std;

int main() {

	list<int> my_list = { 1, 2, 3, 1, 2, 3 };

	for (int val : my_list) {
		cout << val << endl;
	}

	cout << "-----" << endl;

	my_list.remove(3);

	for (int val : my_list) {
		cout << val << endl;
	}

	return 0;
}
复制代码
# 输出结果

1
2
3
1
2
3
-----
1
2
1
2
  1. 清空 list
cpp 复制代码
#include <iostream>
#include <list>

using namespace std;

int main() {

	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
-----
相关推荐
oak隔壁找我3 小时前
MySQL中 SHOW FULL PROCESSLIST` 输出中 `State` 列的所有可能值
后端
上进小菜猪4 小时前
基于 YOLOv8 的面向文档智能处理的表格区域检测系统 [目标检测完整源码]
后端
oak隔壁找我4 小时前
JVM常用调优参数
java·后端
IT_陈寒8 小时前
React状态管理终极对决:Redux vs Context API谁更胜一筹?
前端·人工智能·后端
晨星shine9 小时前
GC、Dispose、Unmanaged Resource 和 Managed Resource
后端·c#
蝎子莱莱爱打怪9 小时前
OpenClaw 从零配置指南:接入飞书 + 常用命令 + 原理图解
java·后端·ai编程
倚栏听风雨9 小时前
【ES避坑指南】明明存的是 "CodingAddress",为什么 term 查询死活查不到?彻底搞懂 text 和 keyword
后端
程序员爱钓鱼9 小时前
Go 操作 Windows COM 自动化实战:深入解析 go-ole
后端·go·排序算法
回家路上绕了弯10 小时前
深入解析Agent Subagent架构:原理、协同逻辑与实战落地指南
分布式·后端
子玖10 小时前
实现微信扫码注册登录-基于参数二维码
后端·微信·go