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

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

一、创建与初始化

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

二、元素访问

  • 首尾元素访问
#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 的大小
#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 的是否为空
#include <iostream>
#include <list>using namespace std;int main() {list<int> my_list = { 10, 20, 30 };cout << "是否为空:" << (my_list.empty() ? "是" : "否") << endl;return 0;
}
# 输出结果

四、元素遍历

  1. 正向遍历
#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. 反向遍历
#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 循环
#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. 在末尾添加元素
#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. 在开头添加元素
#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. 在指定位置插入元素
#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. 删除末尾元素
#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. 删除开头元素
#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. 删除指定位置元素
#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 的元素)元素
#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
#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
-----

相关文章:

  • 部署Superset BI(二)再战Superset
  • DeepSeek+Excel:解锁办公效率新高度
  • 【C语言练习】017. 理解指针与数组的关系
  • 【计算机视觉】三维视觉:Instant-NGP:实时神经辐射场的革命性突破
  • [创业之路-354]:农业文明到智能纪元:四次工业革命下的人类迁徙与价值重构
  • Linux发展史、开源文化与技术生态全景
  • 二项分布习题集 · 答案与解析篇
  • 虚幻引擎 IK Retargeter 编辑器界面解析
  • tinycudann安装过程加ubuntu18.04gcc版本的升级(成功版!!!!)
  • 敏感词 v0.25.1 新特性之返回匹配词,修正 tags 标签
  • Linux:信号(一)
  • ARM 指令集(ubuntu环境学习)第七章:系列总结与未来展望
  • 多模态大模型轻量化探索-开源SmolVLM模型架构、数据策略及其衍生物PDF解析模型SmolDocling
  • AE模板 300个故障干扰损坏字幕条标题动画视频转场预设
  • n8n 键盘快捷键和控制键
  • 基于DQN的自动驾驶小车绕圈任务
  • [machine learning] Transformer - Attention (一)
  • Android和iOS测试的区别有哪些?
  • Haskell Drracket OCaml Prolog 逻辑式编程函数式编程代写代做
  • Conda 与 Spyder 环境管理
  • 市场驱动的系统改造:丹麦零弃风经验研究
  • 研究完蚂蚁搬家,我好像明白了为什么我们总是堵车
  • 巴菲特执掌60年,伯克希尔市值如何增长5.5万倍?详解五大经典投资案例
  • 党政机关停车场免费、食堂开放,多地“五一”游客服务暖心周到
  • 韩国法院将重审李在明案,韩德洙入局能否为大选带来变数?
  • 图忆|上海车展40年:中国人的梦中情车有哪些变化(上)