常用算法(下)---拷贝、替换、算术生成、集合算法
常用算法下一、常用拷贝和替换算法1.copy容器内指定范围内的元素拷贝到另一容器中。函数原型copy(iterator beg,iterator end,iterator dest);使用示例void print01(int val) { cout val ; } //copy void test01() { vectorintv; for (int i 0; i 10; i) { v.push_back(i); } for_each(v.begin(), v.end(), print01); cout endl; //copy复制 vectorintv2; v2.resize(v.size());//复制时空容器一定要预先指定大小 copy(v.begin(), v.end(), v2.begin()); for_each(v2.begin(), v2.end(), print01); cout endl; }空容器一定要提前开辟空间2.replace将指定范围内的旧元素修改为新元素。函数原型replace(iterator beg,iterator end,old value,newvalue);void test02() { vectorintv; for (int i 0; i 10; i) { v.push_back(i); } cout befor replace: endl; for_each(v.begin(), v.end(), print01); cout endl; //替换 cout after replace: endl; replace(v.begin(), v.end(), 0, 10); for_each(v.begin(), v.end(), print01); cout endl; }3.replace_if将区间内满足条件的元素替换成指定元素。函数原型replace_if(iterator beg,iterator end,_pred,newvalue);class myPlace { public: bool operator()(int val) { return val 7;//我的条件小于7的都满足我需要替换的条件 } }; void test03() { vectorintv; for (int i 0; i 10; i) { v.push_back(i); } cout 替换前 endl; for_each(v.begin(), v.end(), print02());// 0 1 2 3 4 5 6 7 8 9 cout endl; //替换 cout 替换后 endl; replace_if(v.begin(), v.end(), myPlace(), 7);//所有满足myPlace条件的都将替换成7 for_each(v.begin(), v.end(), print02());// 7 7 7 7 7 7 7 7 8 9 cout endl; }_Pred是谓词也是我们需要写的替换条件4.swap互换两个容器中的元素。函数原型swap(container c1,container c2);void test04() { vectorintv; for (int i 0; i 10; i) { v.push_back(i); } vectorintv2; for (int i 100; i 110; i) { v2.push_back(i); } cout before swap: endl; for_each(v.begin(), v.end(), print01); cout endl; for_each(v2.begin(), v2.end(), print02()); cout endl; //交换 cout after swap: endl; swap(v, v2); for_each(v.begin(), v.end(), print01); cout endl; for_each(v2.begin(), v2.end(), print02()); cout endl; }两个容器必须是同一种类型不需要留空间二者大小直接交换二、常用算术生成算法算术生成算法属于小型算法使用时应包含头文件#includenumeric1.accumulate计算区间内容器元素累计总和。accumulate(iterator beg,iterator end,value);value为起始叠加值即从什么开始累加void test05() { vectorintv; int sum 0; for (int i 0; i 10; i) { v.push_back(i); sum i; } int sum1 accumulate(v.begin(), v.end(), 0); cout sum endl;//55 cout sum1 endl;//55 }应用评委打分累加分数若value为0则从0开始加若value为100则从100开始加即容器内部元素总和加value为最终输出的值。2.fill向容器中填充指定的元素。函数原型fiil(iterator beg,iterator end,value);value为填充的值void test06() { vectorintv; v.resize(7);//指定容器大小默认为0现在是7个0 for_each(v.begin(), v.end(), print01);//0 0 0 0 0 0 0 cout endl; //后期重新填充 fill(v.begin(), v.end(), 6); for_each(v.begin(), v.end(), print01);//6 6 6 6 6 6 6 cout endl; }三、常用集合算法1.set_intersection求解两个容器的交集。set_intersection(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);求解两个容器的交集并将交集放在目标容器中destvoid test07() { vectorintv1; for (int i 0; i 10; i) { v1.push_back(i); } vectorintv2; for (int i 5; i 18; i) { v2.push_back(i); } vectorintv3; v3.resize(min(v1.size(),v2.size())); //交集最好的情况就是其中一个容器是完全包含在另一个容器中的所以最大的交集个数为二者大小最小的 //获取交集 vectorint::iterator pos set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin()); //元素个数没有容器容量大的话会以默认值0填充所以我们会使用它返回的结束迭代器 for_each(v3.begin(), pos, print01); cout endl; }函数的返回值是一个迭代器是求解的交集中的最后一个元素的位置。遍历时就使用这个迭代器两个源容器需要是有序的序列才可以2.set_union求两个集合的并集。set_union(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);两个集合必须是有序序列void test08() { vectorintv1; for (int i 0; i 12; i) { v1.push_back(i); } vectorintv2; for (int i 6; i 17; i) { v2.push_back(i); } vectorintv3; v3.resize(v1.size()v2.size());//最坏情况下是两个容器内的元素都不相同所以最大的是两个容器的大小和 vectorint::iterator pos set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin()); for_each(v3.begin(), pos, print01);//遍历结束在返回的容器结束迭代器位置否则会以0补充 cout endl; }返回的结果是一个迭代器是求解的并集中的最后一个元素的位置3.set_difference求两个集合的差集。set_difference(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);两个集合必须是有序的序列。求解两个容器的差集第一个容器和第二个容器的差集是指第一个容器中没有出现在第二个容器中的元素void test09() { vectorintv1; for (int i 0; i 13; i) { v1.push_back(i); } vectorintv2; for (int i 7; i 18; i) { v2.push_back(i); } for_each(v1.begin(), v1.end(), print01);//0 1 2 3 4 5 6 7 8 9 10 11 12 cout endl; for_each(v2.begin(), v2.end(), print01);//7 8 9 10 11 12 13 14 15 16 17 cout endl; //求差集 cout v1和v2的差集 endl; vectorintv3; v3.resize(max(v1.size(),v2.size())); vectorint::iterator pos set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin()); for_each(v3.begin(), pos, print01);//0 1 2 3 4 5 6 cout endl; }

相关新闻

2月3日面试题整理 字节跳动后端开发相关

2月3日面试题整理 字节跳动后端开发相关

介绍一下什么是索引?拿书举例,索引相当于目录计算机科学方面,类比可以得出索引是帮助 mysql 高效获取数据的数据结构mysql 的 InnoDB 存储引擎主要使用的是 B树 数据结构作为索引构建出属于表的索引书,走索引查询,可以减少磁盘 I…

2026/7/3 3:13:44 阅读更多 →
Java 线程池线程数怎么定?从 IO / CPU / 混合型任务谈起

Java 线程池线程数怎么定?从 IO / CPU / 混合型任务谈起

文章目录 1. 按照任务类型对线程池进行分类2. 为 IO 密集型任务确定线程数3. 为 CPU 密集型任务确定线程数4. 为混合型任务确定线程数 在实际开发中,线程池几乎是每个 Java 后端绕不开的组件。但真正让人困惑的往往不是怎么用线程池,而是——线程数到底该…

2026/7/3 14:18:27 阅读更多 →
五大热门远程控制软件全方位测评,2026年远控王者花落谁家?

五大热门远程控制软件全方位测评,2026年远控王者花落谁家?

一、核心性能对比:画质与流畅度的较量当一款软件或设备真正进入使用场景后,参数表上的数字往往就失去了存在感。用户最直观、也最难妥协的体验,始终只有两点——画面是否清晰,操作是否顺畅。画质与流畅度决定了用户操作是否顺畅&a…

2026/7/2 21:03:29 阅读更多 →

最新新闻

终极Steam挂卡指南:Idle Master完整使用教程,轻松收集所有交易卡片

终极Steam挂卡指南:Idle Master完整使用教程,轻松收集所有交易卡片

终极Steam挂卡指南:Idle Master完整使用教程,轻松收集所有交易卡片 【免费下载链接】idle_master Get your Steam Trading Cards the Easy Way 项目地址: https://gitcode.com/gh_mirrors/id/idle_master 还在为收集Steam交易卡片而烦恼吗&#x…

2026/7/3 14:16:47 阅读更多 →
2026服装行业数字化避坑:供应链系统(SCM)筛选的全实操解析

2026服装行业数字化避坑:供应链系统(SCM)筛选的全实操解析

导读进入2026年,服装行业的竞争已演变为供应链响应速度的竞争。据中国服装协会《2025年服装产业数字化转型发展白皮书》统计,约42%的规上企业曾遭遇过选型失败,主要表现为流程断层、数据孤岛及后期运维超支。本文将从业务逻辑兼容性、系统稳定…

2026/7/3 14:16:47 阅读更多 →
PIC32MX764F128L与MC74HC165A的多输入采集系统设计

PIC32MX764F128L与MC74HC165A的多输入采集系统设计

1. 项目背景与核心价值在嵌入式系统开发中,IO资源紧张是工程师们经常面临的挑战。当我们需要连接大量输入设备(如按钮、开关)时,传统的直接连接方式会快速耗尽微控制器的GPIO引脚。这就是移位寄存器MC74HC165A发挥作用的场景——它…

2026/7/3 14:16:47 阅读更多 →
STM32F745ZG与25CSM04 EEPROM的高效数据存储方案

STM32F745ZG与25CSM04 EEPROM的高效数据存储方案

1. 项目背景与核心需求 在嵌入式系统开发中,非易失性存储器的选择往往决定了数据管理的效率和可靠性。25CSM04作为一款4Mb容量的SPI接口EEPROM,其独特的安全特性和灵活的写保护机制,使其成为需要精确数据检索场景的理想选择。STM32F745ZG则是…

2026/7/3 14:14:46 阅读更多 →
plymouth-theme-kiran自定义教程:教你修改背景色与动画速度 [特殊字符]

plymouth-theme-kiran自定义教程:教你修改背景色与动画速度 [特殊字符]

plymouth-theme-kiran自定义教程:教你修改背景色与动画速度 🎨 【免费下载链接】plymouth-theme-kiran Plymouth theme for KylinSec OS 项目地址: https://gitcode.com/openeuler/plymouth-theme-kiran 前往项目官网免费下载:https:/…

2026/7/3 14:12:46 阅读更多 →
Kiran-Screensaver安全特性解析:保护Linux桌面隐私的完整指南

Kiran-Screensaver安全特性解析:保护Linux桌面隐私的完整指南

Kiran-Screensaver安全特性解析:保护Linux桌面隐私的完整指南 【免费下载链接】kiran-screensaver This program provides screensaver backend. 项目地址: https://gitcode.com/openeuler/kiran-screensaver 前往项目官网免费下载:https://ar.op…

2026/7/3 14:12:46 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻