C++学习日记 Day18:STL-拷贝替换/算术生成/集合算法
## 今天学了什么今天学习C中STL-常用拷贝替换/算术生成/集合算法并结合所学STL完成两个案例。## 常用的拷贝和替换算法copy(v1.begin(), v1.end(), v2.begin()); //拷贝replace(v.begin(), v.end(), oldValue, newValue); //替换replace_if(v.begin(), v.end(), _Pred, val); //按条件替换swap(v1, v2); //两个容器互换 必须同种类型## 常用算术生成算法accumulate(v.begin(), v.end(), val); //计算容器内元素累计总和 返回 int val为起始累加值fill(v.begin(), v.end(), val); // 按val填充## 常用集合算法set_intersection(v.begin(), v.end(), v2.begin(), v2.end(), vT.begin()); //交集 大小minset_union(v.begin(), v.end(), v2.begin(), v2.end(), vT.begin()); //并集大小v1.size()v2.size()set_difference(v.begin(), v.end(), v2.begin(), v2.end(), vT.begin()); //差集 大小v.size()使用该类算法注意事项必须确保两个集合是有序的必须先规定接收容器的大小返回值 返回结果最后一个元素的位置## 练习** 员工分组 **要求• 公司今天招聘了10个员工ABCDEFGHIJ10名员工进入公司之后需要指派员工在哪个部门工作• 员工信息有: 姓名、工资组成部门分为策划、美术、研发• 随机给10名员工分配部门和工资• 通过multimap进行信息的插入key(部门编号)value(员工)• 分部门显示员工信息案例分析定义一个员工类Woker 包含姓名和工资使用vector容器存放10名员工利用for循环创建10名员工对象随机生成工资信息并存放到vector中遍历vector容器随机生成部门编号0策划1美术2研发通过multimap进行信息绑定key(部门编号)value(员工)遍历multimap打印员工信息。代码如下#includeiostream using namespace std; #includevector #includemap #define Planning 0 #define Art 1 #define RD 2 class Woker { public: string woker_name; int woker_salary; }; void createWoker(vectorWoker w) { string num ABCDEFGHUIJ; for (int i 0; i 10; i) { Woker wk; wk.woker_name 员工; wk.woker_name num[i]; wk.woker_salary rand() % 10001 10000; w.push_back(wk); } } void MakeDepartment(const vectorWoker w) { multimapint, Woker Part_woker; for (vectorWoker::const_iterator it w.begin(); it ! w.end(); it) { int ptmId rand() % 3; Part_woker.insert(make_pair(ptmId, *it)); } for(multimapint,Woker::iterator it Part_woker.begin();it! Part_woker.end();it) { if (it-first Planning) { cout 策划部: 姓名 it-second.woker_name 工资 it-second.woker_salary endl; } else if (it-first Art) { cout 美术部: 姓名 it-second.woker_name 工资 it-second.woker_salary endl; } else if (it-first RD) { cout 开发部: 姓名 it-second.woker_name 工资 it-second.woker_salary endl; } } } void test() { srand((unsigned int)time(nullptr)); vectorWoker wk; createWoker(wk); MakeDepartment(wk); } int main() { test(); return 0; }测试结果编译运行10名员工分部门打印员工信息。** 学生成绩管理系统 **要求· 添加学生姓名 成绩;· 按姓名查成绩;· 计算班级平均分· 按成绩排序升序/降序;· 删除学生· 显示所有学生案例分析定义一个学生类Student 包含姓名和成绩使用vector容器存放学生利用for循环创建学生对象随机生成成绩并存放到vector中利用sort算法#includealgorithm给学生按成绩降序排列利用find_if查找对应学生的成绩找到则打印成绩仿函数/普通函数优先仿函数方便动态使用利用erase删除学生对象利用accumulate#includenumeric统计班级总分用于求班级平均分遍历vector容器打印学生信息代码如下#includeiostream using namespace std; #includevector #includealgorithm #includenumeric class Student { public: string stu_name; int stu_score; }; //创建学生 void createScore(vectorStudent s) { string name[] {张飞,刘备,赵云,安琪拉,韩信,李元芳,狄仁杰,关羽,姜子牙,蔡文姬}; for (int i0;i10;i) { Student stu; stu.stu_name name[i]; stu.stu_score rand() % 41 60; s.push_back(stu); } } //遍历打印学生成绩 void printStudent(const vectorStudent vs) { for (vectorStudent::const_iterator it vs.begin(); it ! vs.end(); it) { cout 学生姓名 it-stu_name 成绩 it-stu_score endl; } } //按姓名查找学生成绩 bool findScore(const Student s) { return s.stu_name 张飞; } class StudentScore { public: StudentScore(string n) :name(n) {}; //按姓名查找学生成绩 bool operator()(const Student s)//Studentscore a(张飞) a.operator()(s)a(s) { return s.stu_name this-name; } string name; }; void test() { vectorStudent v; //创建学生信息 createScore(v); //printStudent(v); //cout endl; //按成绩排序 从高到低 sort(v.begin(), v.end(), [](const Student s1, const Student s2) { return s1.stu_score s2.stu_score; }); printStudent(v); cout endl; //按姓名查找学生成绩 //vectorStudent::iterator it find_if(v.begin(), v.end(), findScore); vectorStudent::iterator it find_if(v.begin(), v.end(), StudentScore(刘备)); if (it ! v.end()) { cout it-stu_name 的成绩为 it-stu_score 分。 endl; } else { cout 没有查到该学生的成绩 endl; } cout endl; //删除学生 //v.erase(v.begin() 2); vectorStudent::iterator N find_if(v.begin(), v.end(), StudentScore(赵云)); if (N ! v.end()) v.erase(N); cout 删除后学生信息 endl; printStudent(v); cout endl; //求班级平均分 int numaccumulate(v.begin(), v.end(), 0, AddScore); int aver num / v.size(); cout 班级平均分为 aver endl; } int main() { srand((unsigned int)time(nullptr)); test(); return 0; }测试结果编译运行成功创建学生信息排序、查找、删除功能无误。补充在删除学生时先判断学生是否存在用使用find_if查找学生姓名找到返回迭代器it后利用eraseit更安全。

相关新闻

小白程序员必收藏!3个黄金赛道助你年薪百万,2026春招已释放信号!

小白程序员必收藏!3个黄金赛道助你年薪百万,2026春招已释放信号!

大模型产业迎来高速发展,AI岗位需求激增,年薪百万成为可能。文章介绍了具身智能、人工智能(基础算法方向)和智能科学与技术(AIX方向)三个专业方向,分别适合动手能力强、数学功底扎实、兴趣广泛的…

2026/10/11 7:45:59 阅读更多 →
artcraft创作流程拆解:从素材准备到参数化生成的半自动实践

artcraft创作流程拆解:从素材准备到参数化生成的半自动实践

1. 从“artcraft”这个名字说起:它到底想解决什么问题第一次看到“artcraft”这个项目标题,我的直觉是:这大概率是一个把“艺术创作”和“手工实现”捏在一起的东西。拆开看,“art”指向审美、设计、视觉表达,“craft”…

2026/10/11 7:45:59 阅读更多 →
进程、资源观察与 Systemd 服务管理

进程、资源观察与 Systemd 服务管理

一、程序、进程、线程:一句话分清程序是磁盘上的可执行文件,比如 /usr/sbin/nginx,它安安静静躺在硬盘上,还没有运行,关键标识是文件路径。进程是程序的一次运行实例。程序一旦被启动,操作系统就给它一份独…

2026/10/11 7:45:59 阅读更多 →

最新新闻

AI+Data Fabric变革数据架构

AI+Data Fabric变革数据架构

企业数字化已从大数据归集时代迈入智能数据价值时代。传统数据仓库、数据湖、数据中台普遍存在数据孤岛、治理人工成本高、质量不稳定、数据与AI模型割裂等问题,难以支撑大模型训练、实时智能决策、全域数据复用等新场景。Data Fabric(数据编织&#xff…

2026/10/11 8:30:31 阅读更多 →
Redis 当起快递站:生产者消费者 “抢外卖“,发布订阅 “村广播“

Redis 当起快递站:生产者消费者 “抢外卖“,发布订阅 “村广播“

文章目录redis消息队列生产者/消费者模式发布者/订阅者模式redis消息队列 消息队列:把要传输的数据放在队列中,从而实现应用之间的数据交换。 常用功能:可以实现多个应用系统之间的解耦,异步,削峰/限流等。 常用的消…

2026/10/11 8:30:31 阅读更多 →
Agent技能抽象与调度实战:从设计到落地的工程指南

Agent技能抽象与调度实战:从设计到落地的工程指南

1. 从"agent-skills"这个标题说起:一个被低估的工程命题第一次看到"agent-skills"这个命名,我的直觉是:这大概率不是一个单纯的工具库,而是一套围绕"智能体能力"做抽象、编排和复用的工程方案。事实…

2026/10/11 8:30:31 阅读更多 →
搭讪 Redis 的三种姿势:shell、图形工具、PyCharm,牵手成功

搭讪 Redis 的三种姿势:shell、图形工具、PyCharm,牵手成功

文章目录shell 脚本访问 Redis图形工具连接 Redis程序连接 Redispycharm 连接 redis设置和获取值使用字符串操作使用列表操作使用哈希表操作shell 脚本访问 Redis 脚本内容:write_redis.sh #!/bin/bash # Redis 连接参数(可根据需要修改) R…

2026/10/11 8:30:31 阅读更多 →
算法一千零一夜 · 第三夜 神庙之夜的汉诺塔

算法一千零一夜 · 第三夜 神庙之夜的汉诺塔

第三夜 神庙之夜的汉诺塔灯又亮了。第三夜。这一夜不回那间教室。上一夜散场,我带走的是那个归字。递是出发,归是回家,接不归的棋救不回。可是回去的路上,我一直在想这句话的后半截。既然要回家,那条回家的路&#xf…

2026/10/11 8:30:31 阅读更多 →
Skills不是技能列表,而是可验证、可迁移的能力单元

Skills不是技能列表,而是可验证、可迁移的能力单元

1. “skills”不是标签,是能力可测量、可迁移、可复用的最小单元你有没有遇到过这种情况:简历里写了“熟练掌握Python”,面试官却问“你用Python解决过哪个具体问题?数据量多大?性能瓶颈在哪?怎么验证结果正…

2026/10/11 8:29:31 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →