常用算法(下)---拷贝、替换、算术生成、集合算法
常用算法下一、常用拷贝和替换算法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/6/29 19:11:25 阅读更多 →
五大热门远程控制软件全方位测评,2026年远控王者花落谁家?

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

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

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

最新新闻

OpenClaw安装教程详细步骤,图文并茂轻松跟做

OpenClaw安装教程详细步骤,图文并茂轻松跟做

这篇是写给喜欢"图文并茂"风格的朋友的。我会把OpenClaw安装过程中的每个关键步骤都详细描述,并标注你应该在屏幕上看到的界面元素。如果你之前看纯文字教程容易跟丢,这篇会适合你。 OpenClaw最新版本一键部署包下载地址:https://t…

2026/7/3 13:38:33 阅读更多 →
TPAFE0808与PIC32MZ多通道信号采集系统设计

TPAFE0808与PIC32MZ多通道信号采集系统设计

1. 项目背景与核心需求解析 在工业自动化和嵌入式系统开发领域,多通道信号采集与实时控制一直是关键需求。TPAFE0808作为一款8通道模拟前端芯片,配合PIC32MZ2048EFH144这款高性能32位微控制器,能够构建出强大的信号处理与系统监测平台。这种组…

2026/7/3 13:38:33 阅读更多 →
LINUX高通平台交叉编译地图软件GDAL

LINUX高通平台交叉编译地图软件GDAL

参考 LINUX编译地图软件GDAL-CSDN博客 toolchain.cmake文件 set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64)# 高通OE交叉编译器前缀 set(TOOLCHAIN_PREFIX "aarch64-oe-linux-") set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}g…

2026/7/3 13:34:29 阅读更多 →
专业解析:如何通过m4s-converter实现B站缓存视频的格式转换与永久保存

专业解析:如何通过m4s-converter实现B站缓存视频的格式转换与永久保存

专业解析:如何通过m4s-converter实现B站缓存视频的格式转换与永久保存 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 在数字内容日益…

2026/7/3 13:30:26 阅读更多 →
装修公司选哪家?

装修公司选哪家?

济南天地亿家,给您一个理想中的家 在济南装修市场,提起“天地亿家”这个名字,很多正在经历装修的业主都会由衷地点头。对于正在纠结“装修公司选哪家”的朋友来说,深入了解这家深耕泉城多年的品牌,或许能为您的决策提供…

2026/7/3 13:28:25 阅读更多 →
第5篇|应用启动慢半拍:把初始化任务从首屏链路拆出去

第5篇|应用启动慢半拍:把初始化任务从首屏链路拆出去

第5篇|应用启动慢半拍:把初始化任务从首屏链路拆出去 摘要:鸿蒙应用启动慢,很多时候不是页面写得复杂,而是把所有初始化都塞进了首屏之前。配置、用户状态、远程开关、缓存预热、埋点准备,每个任务单看都不…

2026/7/3 13:28:25 阅读更多 →

日新闻

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 阅读更多 →

周新闻

月新闻