C++交换a和b的方法
以下是用C++编写的交换a和b的六种方法:
1. 方法一:使用临时变量
#include <iostream>int main() {int a = 5;int b = 10;std::cout << "Before swapping: a = " << a << ", b = " << b << std::endl;int temp = a;a = b;b = temp;std::cout << "After swapping: a = " << a << ", b = " << b << std::endl;return 0;
}
2. 方法二:使用加法和减法
#include <iostream>int main() {int a = 5;int b = 10;std::cout << "Before swapping: a = " << a << ", b = " << b << std::endl;a = a + b;b = a - b;a = a - b;std::cout << "After swapping: a = " << a << ", b = " << b << std::endl;return 0;
}
3. 方法三:使用异或运算
在编程语言中,a ^ b 通常表示a和b的异或运算,也称为“按位异或”。它是一个二进制运算符,对于每一位,如果两个操作数的对应位不同,则结果为1,否则为0。例如,对于a=5(二进制表示为101)和b=3(二进制表示为011),a ^ b的结果为6(二进制表示为110)。在集合论中,a ^ b通常表示a和b的对称差,即包含在a或b中但不同时包含在a和b中的元素的集合。
#include <iostream>int main() {int a = 5;int b = 10;std::cout << "Before swapping: a = " << a << ", b = " << b << std::endl;a = a ^ b;b = a ^ b;a = a ^ b;std::cout << "After swapping: a = " << a << ", b = " << b << std::endl;return 0;
}
4. 方法四:使用STL库中的swap函数
STL库中的swap函数是一个通用的交换函数,可以用于交换任意两个对象的值。其定义如下:
template<class T> void swap(T& a, T& b);
该函数接受两个参数,分别是要交换的两个对象的引用。在函数内部,它通过调用对象的移动构造函数和移动赋值运算符来实现交换。
具体来说,swap函数会先调用对象的移动构造函数,将a的值移动到一个临时对象中,然后再调用a的移动赋值运算符,将b的值赋给a。最后,再调用b的移动赋值运算符,将临时对象中的值赋给b。这样就完成了a和b的值的交换。
在底层实现上,swap函数通常会使用一个临时对象来完成交换。这个临时对象可以是一个栈上的对象,也可以是一个堆上的对象,具体取决于对象的类型和大小。对于较小的对象,可以使用栈上的临时对象来避免动态内存分配的开销;对于较大的对象,可以使用堆上的临时对象来避免栈溢出的问题。无论使用哪种方式,swap函数都会尽可能地优化交换操作,以提高性能。
#include <iostream>
#include <algorithm>int main() {int a = 5;int b = 10;std::cout << "Before swapping: a = " << a << ", b = " << b << std::endl;std::swap(a, b);std::cout << "After swapping: a = " << a << ", b = " << b << std::endl;return 0;
}
以上四种方法都可以用来交换a和b的值,但它们的实现方式不同。其中,使用临时变量的方法是最常见的,但使用异或运算的方法也很有趣。使用STL库中的swap函数可以使代码更简洁。
另外,还可以使用指针或引用来交换a和b的值。以下是使用指针的示例代码:
5. 方法五:使用指针
void swap(int* a, int* b) {int temp = *a;*a = *b;*b = temp;
}int main() {int a = 5;int b = 10;swap(&a, &b);// 现在a的值为10,b的值为5return 0;
}
在这个示例中,swap
函数接受两个指向整数的指针,然后交换它们所指向的值。在main
函数中,我们创建了两个整数变量a
和b
,然后调用swap
函数并传递它们的地址。这样,swap
函数就可以修改它们的值。
6. 方法六:使用引用
void swap(int& a, int& b) {int temp = a;a = b;b = temp;
}int main() {int a = 5;int b = 10;swap(a, b);// 现在a的值为10,b的值为5return 0;
}
在这个示例中,swap
函数接受两个整数的引用,然后交换它们的值。在main
函数中,我们创建了两个整数变量a
和b
,然后调用swap
函数并传递它们作为引用。这样,swap
函数就可以修改它们的值。
相关文章:
C++交换a和b的方法
以下是用C编写的交换a和b的六种方法: 1. 方法一:使用临时变量 #include <iostream>int main() {int a 5;int b 10;std::cout << "Before swapping: a " << a << ", b " << b << std::end…...
3D孪生场景搭建:模拟仿真
前面几期文章介绍如何使用NSDT 编辑器 搭建3D应用场景,本期介绍下孪生场景中一个一个非常重要的功能:模拟仿真。 1、什么是模拟仿真 模拟仿真是一种用于描述、分析和模拟现实世界中系统、过程或事件的计算机模型和程序。仿真通过输入各种参数和条件&am…...
美国各流域边界下载,并利用arcgis提取与处理
一、边界数据的下载 一般使用最普遍的流域边界数据是从HydroSHEDS官网下载: HydroBASINS代表一系列矢量多边形图层,以全球尺度呈现次级流域边界。该产品的目标是提供一种无缝的全球覆盖,其中包含了不同尺度(从数十到数百万平方千米…...
A Survey and Framework of Cooperative Perception 论文阅读
论文链接 A Survey and Framework of Cooperative Perception: From Heterogeneous Singleton to Hierarchical Cooperation 0. Abstract 首次提出统一的 CP(Cooperative Percepetion) 框架回顾了基于不同类型传感器的 CP 系统与分类对节点结构&#x…...
【SkyWalking】SkyWalking是如何实现跨进程传播链路数据?
文章目录 一、简介1 为什么写这篇文章2 跨进程传播协议-简介 二、协议1 Standard Header项2 Extension Header项3 Correlation Header项 三、跨进程传播协议的源码分析1 OpenTracing规范2 通过dubbo插件分析跨进程数据传播3 分析跨进程传播协议的核心源码 四、小结参考 一、简介…...
px4仿真实现无人机自主飞行
一,确定消息类型 无人机通过即在电脑是现自主飞行:思路如下。 通过Mavros功能包,将ROS消息转换为Mavlink消息。实现对无人机的控制。 几种消息之间的关系如下: 对于ROS数据,就是我们机载电脑执行ROS系统的数据。 对于Mavros消息,就是Mavros功能包内部的消息。查询网站…...
详解Linux的系统调用fork()函数
在Linux系统中,fork()是一个非常重要的系统调用,它的作用是创建一个新的进程。具体来说,fork()函数会在当前进程的地址空间中复制一份子进程,并且这个子进程几乎完全与父进程相同,包括进程代码、数据、堆栈以及打开的文…...
构建捡垃圾机器人的 ROS 2 项目
一、说明 本系列是关于学习如何使用 ROS2、Docker 和 Github 设计、设置和维护机器人项目。 先决条件 — ROS2 软件包的基本知识、实现发布者、订阅者、操作并连接它们。 我们之前在 ROS2 中了解了不同的部分。但是,在我们转向实际的基于硬件的项目之前,…...
Spring常用注解(2)
6、切面(AOP)相关注解 Spring AOP详细介绍 Spring支持AspectJ的注解式切面编程。 Aspect 声明一个切面 After 在方法执行之后执行(方法上) Before 在方法执行之前执行(方法上) Around 在方法执行之前与之后…...
upload-labs靶场通关
文章目录 Pass-01 前端检测(JS检测)1.1 原理分析1.2 实验 Pass-02 后端检测(MIME检测)2.1 原理分析2.2 实验 Pass-03 后端检测(黑名单绕过,特殊后缀名)3.1 原理分析3.2 实验 Pass-04 后端检测&a…...
git拉取代码过程
第一步:先在本地创建文件夹 ,比如我这里的文件夹名称是 fengkgong_zntjfx 第二步:执行命令:git init 第三步:git clone 第四步:git fetch 第五步:git branch -a 第六步:cd 项目 【…...
Swift | 属性包装器
Swift | 属性包装器 1. 什么是 Swift Property Wrapper? Swift Property Wrapper 是一种特性,它允许我们在声明属性时添加自定义的包装逻辑。通过使用属性包装器,我们可以在不修改类或结构体定义的情况下,定制属性的访问和存储方…...
Android改造CardView为圆形View,Kotlin
Android改造CardView为圆形View,Kotlin 可以利用androidx.cardview.widget.CardView的cardCornerRadius特性,将CardView改造成一个圆形的View,技术实现的关键首先设定CardView为一个宽高相等的View(正方形),…...
Idea下面git的使用:变基、合并、优选、还原提交、重置、回滚、补丁
多分支和分支切换 变基和合并 变基是把本项目的所有提交都列出来按顺序一个个提交到目标分支上去 而合并是把两个分支合并起来,但是旧的分支还是可以启动其他分支,在旧的分支上继续开发 master: A -- B -- C -- M/ feature: D -- Emaster: A -…...
【数据结构】什么是算法
🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 一.算法的定义 1.算法的概念 2.数据结构与算法的关系 二.算法的特性 输入 输出 有穷性 确定性 可行性 三.算法的设计要求 1.正确性 2.可读性 3.健壮性 4.效…...
复旦大学EMBA:揭秘科创企业,领略未来战略!
智能制造,国之重器。作为制造强国建设的主攻方向,智能制造的发展水平关系到我国未来制造业在全球的地位与影响力。发展智能制造,是加快建设现代化产业体系的重要手段,提升供给体系适配性的有力抓手,也是建设数字中国的…...
根据您的数据量定制的ChatGPT,改变客户服务的方式
在当今竞争激烈的商业环境中,提供优质的客户服务对于保持忠诚的客户群和推动业务增长至关重要。客户满意度已成为各行各企业的首要任务,因为它直接影响客户留存和品牌声誉。随着技术的进步,公司不断探索创新解决方案,以增强客户服…...
《Unity Shader 入门精要》笔记03
UnityShader的内置变量(数学篇) Unity内置的变换矩阵摄像机和屏幕参数float3 _WorldSpaceCameraPosfloat4 _ProjectionParamsfloat4 _ZBufferParamsfloat4 unity_OrthoParamsfloat4x4 unity_CameraProjectionfloat4x4 unity_CameraInvProjectionfloat4 u…...
LINUX系统使用软件异地同步数据(灾备)
rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步 一、宝塔环境: 有宝塔软件商城支持,参考:https://www.bt.cn/bbs/thread-98022-1-1.html 二、…...
IDEA Rogstry中找不到compiler.automake.allow.when.app.running问题解决
网上大部分人教我们 先 File > Settings 然后 勾选 Build 下的 Compiler中的 Build project automatically 这些步骤都不会有问题 然后就会让我们 ctrl shift alt / 点 Rogstry 打开后 我人就麻了 根本没有什么 compiler.automake.allow.when.app.running 也不用慌 我们…...
c#设计模式-行为型模式 之 状态模式
🚀简介 状态模式是一种行为设计模式,它允许对象在其内部状态改变时改变其行为,我们可以通过创建一个状态接口和一些实现了该接口的状态类来实现状态模式。然后,我们可以创建一个上下文类,它会根据其当前的状态对象来改…...
使用Docker安装JupyterHub
安装JupyterHub 拉取Jupyter镜像并运行容器 docker run -d -p 8000:8000 --name jupyterhub jupyterhub/jupyterhub jupyterhub # -d:后台运行 # -p 8000:8000:宿主机的8000端口映射容器中的8000端口 # --name jupyterhub:给运行的容器起名…...
SpringCloudGateway网关整合swagger3+Knife4j3,basePath丢失请求404问题
在集成 Spring Cloud Gateway 网关的时候,会出现没有 basePath 的情况,例如定义的 /jeeplus-auth、/jeeplus-system 等微服务前缀导致访问接口404: maven依赖: swagger2于17年停止维护,现在最新的版本为 Swagger3&am…...
html通过使用图像源的协议(protocol)相对 URL 来防止安全/不安全错误
有人知道使用 protocol relative URLs 是否有问题吗?用于图像源以防止混合内容安全警告。 例如链接一张图片: <img src"//domain.com/img.jpg" /> 代替: <img src"http://domain.com/img.jpg" /> or <img src"https…...
【SpringBoot】| Thymeleaf 模板引擎
目录 Thymeleaf 模板引擎 1. 第一个例子 2. 表达式 ①标准变量表达式 ②选择变量表达式(星号变量表达式) ③链接表达式(URL表达式) 3. Thymeleaf的属性 ①th:action ②th:method ③th:href ④th:src ⑤th:text ⑥th:…...
Vue Router的进阶
进阶 导航守卫 官方文档上面描述的会比较深奥,而守卫类型也比较多,其中包含了全局前置守卫、全局解析守卫、全局后置钩子、路由独享守卫、组件内守卫。每一种守卫的作用和用法都不相同。这会使得大家去学习的时候觉得比较困难,这边主要介绍…...
方案:快递站智能视频监控3大亮点汇总
快递站智能视频监控方案是一种利用先进的技术和设备,来提升快递站安全管理和快递流程监控的解决方案。具体包括哪些方面呢?今天小编就带大家来看看! 1、视频监控系统 在快递站的关键区域安装旭帆科技高清摄像头,如快递仓库、操作…...
Direct3D网格
创建网格 我们可以用D3DXCreateMeshFVF函数创建一个"空"网格对象 ,空网格对象是指我们指定了网格的面片总数和顶点总数,然后由该函数为顶点缓存、索引缓存和属性缓存分配大小合适的内存,之后即可手工填入网格数据。 HRESULT WINA…...
docker安装wiki
1.docker pull mediawiki 2.docker run -d --name mywiki -p 8666:80 mediawiki 访问ip:8666,就可以看到配置页面了 3.docker pull mysql docker run -d --name my-mysql -e MYSQL_ROOT_PASSWORD123456 -p 3307:3306 mysql 4.在配置页面链接ip:3307,连接数据库,接下…...
bigemap在林业勘测规划设计行业的一些应用
选择Bigemap的原因: 主要注重影像的时效性,软件的影像时效性比其他的更新快,更清晰。 使用场景: 1.林业督查,主要是根据国家下发的图斑,结合测绘局的影像以及bigemap的较新影像对比去年和今年的林地变化。…...
原来做网站后来跑国外了/郴州网站seo
阅读目录Go 语言函数Go 语言函数章节目录Go 语言函数定义_声明_调用(超详细)一、定义一个普通函数1.1 函数名1.2 参数列表1.3 返回参数列表1.4 函数体二、参数列表简写三、函数返回值3.1 同一类型的返回值3.2 带有变量名的返回值四、调用函数Go 语言函数…...
网站规划和建设的步骤/建立网站平台需要多少钱
一、什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Seleni…...
小草网络 网站建设/培训机构营业执照如何办理
1、接口的分类:post、get、delete、put. 2、post与get区别:post请求的数据大,get请求的数据小; post以表单的方式提交、比较安全,get相对不是很安全。 3、接口测试流程: 4、接口测试用例设计点:…...
做火影忍者网站的格式/百度云搜索引擎入口 百度网盘
轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP)是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。OpenLDAP是…...
网站流量如何转化为钱/网页生成
(注:简介基于IDEA的版本为:11.0,下载地址: http://www.jetbrains.com/idea/ ) 打开IDEA,(当第一次打开的时候出现的是一个欢迎页面,随便创建一个project来进入到IDEA的主…...
网站建设方案的重要性/国际新闻今天
题目看这里 一看求和就知道是要先用前缀和的 让后看到类似相等和不相等的条件,可以考虑并查集 当然这道题由于变量的值一定是0,1所以关系只有不等号也有反传递性,可以直接拆点来做 如果s[i]s[j]那么我们就将i,j所在的并查集合并,将i和j所在的…...