C++ 拷贝替换算法

news/2024/5/9 16:57:58/文章来源:https://blog.csdn.net/fckbb/article/details/130957220

🤔拷贝替换算法:

🙂1.copy  拷贝

在 C++ STL 中,copy()是一种常用的算法,用于将一个指定范围内的元素复制到目标位置中,不会改变原有序列的大小。

copy()的函数原型为:

template<class InputIt, class OutputIt>
OutputIt copy(InputIt first, InputIt last, OutputIt d_first);

📖其中,first 和 last 分别表示被复制序列的起始位置和结束位置d_first 表示目标序列的起始位置。

📖copy() 函数从源序列([first, last))中复制元素到目标序列([d_first, d_first+(last-first)))中。它返回目标序列中最后一个被写入元素的后继位置。

copy() 函数可以对标准数组、STL 容器等基本类型以及自定义类型进行操作。

🔍代码示例:

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
void print(int val)
{cout << val<<" ";
}
int main()
{vector<int>d1;for (int i = 0; i < 10; i++){d1.push_back(i);}vector<int>d2;d2.resize(10);copy(d1.begin(), d1.end(), d2.begin());cout << "拷贝后:";for_each(d2.begin(), d2.end(), print);
}

🔍运行结果:

🙂 2.replace   替换

在 C++ STL 中,replace()是一种常用的算法,用于在范围内以新值替换旧值。

replace()的函数原型为:

template<class ForwardIt, class T>
void replace(ForwardIt first, ForwardIt last, const T &old_value, const T &new_value);

📖replace() 函数将输入范围 first 至 last-1 中等于 old_value 的元素替换为 new_value

🔍代码示例:

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
void print(int val)
{cout << val << " ";
}
int main()
{vector<int>d1;d1.push_back(10);d1.push_back(20);d1.push_back(30);d1.push_back(40);d1.push_back(20);  d1.push_back(20);d1.push_back(30);d1.push_back(20);//替换所有的20为2000replace(d1.begin(),d1.end(),20 ,2000);cout << "替换后";for_each(d1.begin(), d1.end(), print);
}

🔍 运行结果:

🙂 3.replace_if    按条件替换

在 C++ STL 中,replace_if 是一种常用的算法,用于在指定的范围内以新值替换符合特定判定条件的值

replace_if  的函数原型为:

template<class ForwardIt, class UnaryPredicate, class T>
void replace_if(ForwardIt first, ForwardIt last, UnaryPredicate p, const T &new_value);

📖first  last 分别表示需要替换的序列的起始位置和结束位置p 是一个一元谓词(即接受一个参数并返回 bool 值的函数),用于判断每个元素是否需要被替换;new_value 表示新值。

📖replace_if() 函数将输入范围 first 至 last-1 中满足 p 判定条件的元素替换为 new_value

🔍代码示例:

我们把比30大的元素都替换为2000.

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
class greater30
{
public:bool operator() (int val){if (val < 30){return false;}return true;}
};
void print(int val)
{cout << val << " ";
}
int main()
{vector<int>d1;d1.push_back(10);d1.push_back(20);d1.push_back(30);d1.push_back(40);d1.push_back(20);  d1.push_back(20);d1.push_back(30);d1.push_back(20);//替换所有的不符合条件的replace_if(d1.begin(),d1.end(),greater30(), 2000);cout << "替换后";for_each(d1.begin(), d1.end(), print);
}

🔍运行结果:

🙂 4.swap  交换

在 C++ STL 中,swap是一种常用的算法,用于交换两个对象的值,可以用于任何支持拷贝构造函数和赋值操作符的类型

swap的函数原型为:

template<class T>
void swap(T& a, T& b);

其中,a 和 b 分别表示需要交换的两个对象。

📖swap() 函数交换两个对象的值,不需要为对象分配新的内存空间。需要注意的是,对于大型对象,使用 swap() 函数比直接赋值更高效。

📖swap() 函数可以对任何支持拷贝构造函数和赋值操作符的类型进行操作,包括基本类型和自定义类型。

🔍代码示例:

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;void print(int val)
{cout << val << " ";
}
int main()
{vector<int>d1;vector<int>d2;d1.push_back(10);d1.push_back(20);d1.push_back(30);d1.push_back(40);d1.push_back(20);  d1.push_back(20);d1.push_back(30);d1.push_back(20);d2.push_back(100);cout << "交换前";cout << "d1:";for_each(d1.begin(), d1.end(), print);cout << endl;cout << "d2:";for_each(d2.begin(), d2.end(), print);cout << endl;cout << "交换后";swap(d1,d2);cout << "d1:";for_each(d1.begin(), d1.end(), print);cout << endl;cout << "d2:";for_each(d2.begin(), d2.end(), print);}

🔍运行结果:

 

🤔结束!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_308892.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何系统地学习IT技术

从基础技术到高级应用&#xff0c;IT技术发展迅速&#xff0c;我们需要建立系统性的学习方法&#xff0c;才能跟上它的速度。接下来&#xff0c;我将分享我的个人经验&#xff0c;介绍如何系统地学习IT技术&#xff0c;以及如何在快速学习过程中确保自己的技术水平越来越高。 …

在Linux设备上让程序在任意目录都能执行

目录 0. 前言1. 编写代码2. 创建软链接3. 其他Linux文章 0. 前言 在Ubuntu上使用espidf中往往需要先设置环境变量&#xff0c;再执行export.sh&#xff0c;对环境装的乱七八糟的我造成了很大的不便我希望无论我在哪个目录&#xff0c;都能快速执行某个命令 我先是使用了编写b…

软件测试用例的设计以及分类

文章目录 测试用例设计1.测试用例2.设计测试用例的方法1) 等价类2) 边界值3) 判定表法4) 正交法5) 场景设计法6) 错误猜测法 3. 测试分类1) 按测试对象划分2) 按是否查看代码划分黑盒测试白盒测试灰盒测试为什么不直接使用灰盒测试常见的测试方法有哪些&#xff1f;哪些方法用的…

API接口的重要性和好处|附加淘宝api接口展示案例|商品数据采集演示

随着互联网的发展&#xff0c;API接口已经成为许多企业进行信息交流和数据管理的重要工具。通过API接口&#xff0c;企业之间能够快速、可靠地进行数据传输和信息共享&#xff0c;从而提高了企业的生产效率和服务质量。以下是API接口的重要性和好处的文章&#xff1a; 1.提高生…

智慧工厂~经典开源项目数字孪生智慧工厂——开源工程及源码

以领先的数字孪生技术为基础&#xff0c;全面打造智慧工厂。现有云南某大型汽车加工厂工程和源码免费赠送&#xff01; 项目介绍 智慧工厂基于数字孪生技术创建了一个真实的三维模型场景。通过对传感器和机器的数据采集、分析处理&#xff0c;实时监控各生产环节&#xff0c;优…

软考A计划-试题模拟含答案解析-卷十三

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

何时加索引,性别字段和逻辑删除字段应不应该加

首先哪些地方加索引&#xff08;按照sql执行顺序写&#xff09; 1、from表扫描连接处索引 2、where后条件去走索引 3、group by加索引 4、select查询不用加 5、order by排序加索引 &#xff08;对于第四点&#xff0c;覆盖索引&#xff1a;查询的字段都被索引覆盖&#xff0c;…

QT(QPainter画圆弧)

文章目录 前言一、QPainter画圆弧方法二、使用示例三、画一个彩色环总结 前言 本篇文章给大家介绍一下如何使用QPainter来画圆弧。 一、QPainter画圆弧方法 drawArc() 函数是 Qt 绘图类库中的一个函数&#xff0c;用于在画布上绘制圆弧。可以通过设置起点角度和圆弧弧度来控…

Flink从入门到精通之-12Flink CEP

Flink从入门到精通之-12Flink CEP 在 Flink 的学习过程中&#xff0c;从基本原理和核心层 DataStream API 到底层的处理函数、再到应用层的 Table API 和 SQL&#xff0c;我们已经掌握了 Flink 编程的各种手段&#xff0c;可以应对实际应用开发的各种需求了。 在大数据分析领域…

「从零入门推荐系统」19:HM推荐系统代码实战案例

作者 | gongyouliu 编辑 | gongyouliu 我们在上一章中利用Netflix prize数据集讲解了最基础、最简单的一些推荐系统召回、排序算法&#xff0c;大家应该对怎么基于Python实现推荐算法有了一些基本的了解了。接着上一章的思路&#xff0c;本章我们会基于一个更复杂、更近代一点的…

Android studio 环境安装

1. Java JDK安装 https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe 下载jdk-17 并安装 安装完成后设置环境变量 #新增环境变量JAVA_HOME C:\Program Files\Java\jdk-17#Path 环境变量添加 %JAVA_HOME%\bin %JAVA_HOME%\jdk\bin#新增环境变量CLASSPAT…

Zabbix从入门到精通以及案例实操系列

1、Zabbix入门 1.1、Zabbix概述 Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的软件。Zabbix使用灵活的通知机制&#xff0c;允许用户为几乎任何事件配置基于邮件的告警。这样可以快速反馈服务器的问题。基于已存储的数据&#xff0c;Zabbix提供了出色的报告和…

JAVA开发(手工处理数据库表数据的一些示例算法)

背景&#xff1a; 在项目开发中&#xff0c;有时候需要手动处理一下数据库表的数据。涉及到数据得到备份、恢复&#xff0c;清洗&#xff0c;计算&#xff0c;合并等操作。 举例记录一下最近对数据的一些处理过程。 1、对数据表进行数据量统计 select count(*) from table…

python 自动编译VS项目

目录 一、python自动编译项目 1、环境变量 1) CMAKE 2&#xff09;VS 2、CMAKE 生成VS项目 1) cmake 命令介绍 2&#xff09;python 调用cmake 命令 3、devenv编译VS项目 1) devenv介绍 2&#xff09;devenv命令行开关 3) 自动编译VS项目 一、python自动编译项目 …

玩转用户旅程地图

图&#xff1a;史江鸿 从事需求分析和产品设计工作已经有几个年头了&#xff0c;我很享受这个职业。因为在这段职业历程中&#xff0c;我学到了很多有意思的方法和工具&#xff0c;用户旅程地图就是其中一个。 如今在国内外许多IT公司&#xff0c;用户旅程地图已经成为需求分析…

100万数据导出,居然爆炸了OutOfMemoryError?【EasyPoi实战系列】- 第472篇

历史文章&#xff08;文章累计460&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 用…

软考高级架构师笔记-5计算机网络

目录 1. 前言 & 考情分析2. 网络功能和分类2.1 通信技术3. OSI七层模型及协议3. 1 局域网和广域网协议3. 2 协议3. 3 交换技术、路由、传输介质4 IP地址5 网络存储技术6 其它考点8. 结语1. 前言 & 考情分析 前文回顾: 软考高级架构师笔记-1计算机硬件软考高级架构师笔…

喜讯!图扑荣获用友年度十佳产业融合生态伙伴称号

2023 年 4 月 20 日&#xff0c;由中华全国工商业联合会联合工业和信息化部、国务院国资委组织开展的 2023 年度“百场万企”大中小企业融通对接活动——智能制造 MES 产业融通对接会暨 2023 用友 BIP 技术大会 MES 生态创新专题论坛在用友产业园顺利召开。 用友年度生态合作伙…

STM32 Linux开发板丨STM32MP157开发板资料手册+实战教程+视频教程

iTOP-STM32MP157开发板是基于意法半导体STARM双Cortex-A7核加单Cortex-M4核的一款多核异构处理器。Cortex-A7内核提供对开源操作系统Linux的支持&#xff0c;借助Linux系统庞大而丰富的软件组件处理复杂应用。M4内核上运行对于实时性要求严格的应用。 开发板既有A7核&#xff…

一般测试用例执行过程的四个步骤

一般测试用例执行过程的四个步骤 测试用例的执行过程是软件测试中非常重要的一环&#xff0c;它可以有效验证软件是否符合预期的功能和性能要求&#xff0c;进而保证软件的质量和稳定性。一般来说&#xff0c;测试用例的执行过程可以分为四个步骤&#xff1a; 第一步&#xff1…