尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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更安全。
RELATED

相关推荐

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

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

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

📅 2026/10/11 7:45:47
artcraft创作流程拆解:从素材准备到参数化生成的半自动实践

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

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

📅 2026/10/11 7:45:47
进程、资源观察与 Systemd 服务管理

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

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

📅 2026/10/11 7:45:47
MORE NEWS

更多资讯

📰

REA模型:用事件驱动思路重构企业核心数据模型

很多人在做企业系统重构时,都绕不开凭证、流水、账户余额这一套老逻辑。早期我也一样,张口闭口就是科目余额表、借贷匹配。直到某天接手一个租赁设备中心的库存系统,我才真正意识到,传统复式记账模型在企业业务系统里已经拧巴到了…

📰

测试001项目复盘:时间压缩下的测试策略与缺陷管理实战

1. 测试001项目上线前的最后48小时:我做了哪些亡羊补牢的事"测试001"这个项目代号,我印象太深了。不是因为它技术含量多高,而是因为它几乎踩遍了一个测试项目能踩的所有坑:需求文档含糊、开发自测不充分、测试环境不稳定…

📰

扩散模型图像恢复实战:从DDPM原理到条件生成与DDIM采样

简介:这份资源面向深度学习研究者与图像恢复方向的开发者,提供一套基于扩散模型(diffusion model)的完整可运行代码,只需修改数据集路径即可直接用于去雨、去雾、去雪等多种图像恢复任务。压缩包共30个文件&#xff0c…

📰

开源趋势周报第40周:开发工具链与AI编程助手新动向

1. 这份周报到底在追踪什么每周花几个小时翻一遍开源社区的趋势榜单,已经成了我这两年雷打不动的习惯。2026年第40周这份趋势周报,说白了就是把这一周里冒头最快、讨论度最高的那些项目做一次集中梳理,看看大家都在折腾什么方向、哪些技术栈正…

📰

Java集合框架深度解析:从ArrayList到ConcurrentHashMap的选型与性能陷阱

1. 从一道面试题说起:JCF为什么值得你认真对待但凡写过Java的人,几乎每天都和java.util包打交道。但说句实在话,大部分人对Java集合框架(Java Collections Framework,JCF)的认知停留在“会用ArrayList存数据…

📰

Windows Server 2008 R2 SQL Server 2008 R2 生产数据库快照复用指南

简介:本资源是Oracle 10g Release 2(10.2.0.4)在Windows Vista与Windows Server 2008 x64平台下的生产级数据库部署包,面向DBA、企业级数据库运维人员及Oracle高可用环境搭建学习者,解决64位Windows系统下Oracle生产库…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬