c++中用各种不同的方法来实现交换函数

2023-11-15

今天来学习一下c++中用各种不同的方法来实现交换函数

第一:

#include<iostream>
using namespace std;
void swap(int a, int b)
{
	int c = a;
	a = b;
	b = c;
}
int main()
{
	int a = 1;
	int b = 2;
	cout << "a=" << a << "b=" << b << endl;
	swap(a, b);
	cout << "a=" << a << "b=" << b << endl;
	system("pause");
	return 0;
}

下面是这段代码的运行结果:

标题

从运行结果可以看出我们定义的swap 函数并没有实现交换a和b 两者的值原因是:函数传入的是形参,并没有改变main()函数中a,b的地址,因此a和b的值并没有发生交换

下面我们使用函数传入指针参数来实现这个交换函数

#include<iostream>
using namespace std;
void swap(int *a, int *b)
{
	int c = *a;
	*a = *b;
	*b = c;
}
int main()
{
	int a = 1;
	int b = 2;
	cout << "a=" << a << "b=" << b << endl;
	swap(&a, &b);
	cout << "a=" << a << "b=" << b << endl;
	system("pause");
	return 0;
}

下面是运行结果:

函数参数传入的是指针即地址,函数中a,b的交换是地址的交换,因此最后mian()函数中的a,b值发生了交换

下面我们采用引用的方法来实现这个交换函数:

代码如下:

#include<iostream>
using namespace std;
void swap(int &a, int &b)
{
	int c = a;
	a = b;
	b = c;
}
int main()
{
	int a = 1;
	int b = 2;
	cout << "a=" << a << "b=" << b << endl;
	swap(a, b);
	cout << "a=" << a << "b=" << b << endl;
	system("pause");
	return 0;
}

输出结果:

我们可以发现采用引用的方法同样实现了交换函数

引用的原理:本质是把main()函数中的a,b变量换了个名字,即函数中的a,b他的地址和main函数中的地址是一样的,如果函数中a,b的值改变则main()函数中a,b 的值也会改变

上面的函数都只能实现对一种特定类型的数据进行交换,现在我们来使用函数模板的方法实现对不同数据类型进行互换代码如下

#include<iostream>
#include<string>
using namespace std;
template <typename T>
void fun(T &x, T &y)//fun函数可以写成:Swap但是千万别写成swap,呜呜呜我吐了
{
	T t;
	t= x;
	x = y;
	y = t;
}
int main()
{
	int a = 2, b = 3;
	double c = 1.2, d = 1.3;
	char e = 'e', f = 'f';
	cout << "交换之前:" << "a=" << a << "" << "b=" << b << endl;
	fun(a, b);
	cout << "交换之后:" << "a=" << a << "" << "b=" << b << endl;
	cout << "交换之前:" << "c=" << c << "" << "d=" << d << endl;
	fun(c, d);
	cout << "交换之后:" << "c=" << c << "" << "d=" << d << endl;
	cout << "交换之前:" << "e=" << e << "" << "f=" << f << endl;
	fun(e, f);
	cout << "交换之后:" << "e=" << e << "" << "f=" << f << endl;
	system("pause");
	return 0;
}

输出结果如下:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++中用各种不同的方法来实现交换函数 的相关文章

  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • 获取按下的按钮的返回值

    我有一个在特定事件中弹出的表单 它从数组中提取按钮并将标签值设置为特定值 因此 如果您要按下或单击此按钮 该函数应返回标签值 我怎样才能做到这一点 我如何知道点击了哪个按钮 此时代码返回 DialogResult 但我想从函数返回 Tag
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • 将 xml 反序列化为类,list<> 出现问题

    我有以下 XML
  • 为什么我收到“找不到编译动态表达式所需的一种或多种类型。”?

    我有一个已更新的项目 NET 3 5 MVC v2 到 NET 4 0 MVC v3 当我尝试使用或设置时编译出现错误 ViewBag Title财产 找不到编译动态表达式所需的一种或多种类型 您是否缺少对 Microsoft CSharp
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 防止索引超出范围错误

    我想编写对某些条件的检查 而不必使用 try catch 并且我想避免出现 Index Out of Range 错误的可能性 if array Element 0 Object Length gt 0 array Element 1 Ob

随机推荐

  • 2023 年 IDEA Maven 源修改为国内阿里云镜像的正确方式,亲测可用

    前言 由于众所周知的原因 maven的库在中国大陆非常慢 我在百度上搜到的大部分文章都是直接在 m2 settings xml 加入以下内容
  • Linux_网络项目_WEB服务器 设计CGI机制,与CGI处理数据

    文章紧跟之前web服务器返回静态网页 文章目录 CGI设计思路 设计CGI代码 CGI设计思路 CGI原理如下图 其中CGI程序可以使用任何后端语言进行编写 而服务器是可执行程序 而CGI程序也是可执行程序 可以创建子进程使用进程替换来实现
  • MySQL C API

    Mysql API数据结构 Mysql API中用到了很多结构体等数据类型 下面就简单说说常用的几个数据结构的含义 至于它们的定义鸡啄米就不贴了 大家可以到Mysql提供的mysql h头文件中查看 MYSQL 连接数据库前 必须先创建MY
  • 【小沐学Android】Android实现socket网络通信

    SOCKET网络通信系列文章链接如下 小沐学python 一 Python简介和安装 Python实现socket网络通信 C 实现socket网络通信 Windows Android实现socket网络通信 nodejs实现socket网
  • Opencv立体相机标定

    0 简要 立体相机标定是立体视觉深度测量的重要步骤 相机标定的精度很大程度上决定了深度的精度 因此掌握立体相机的标定算法和过程至关重要 由于相机标定原理可以在网上找到很多相关资料 因此本文不展开讲原理部分 感兴趣的同学可以移步到https
  • MySQL数据库学习——DQL语句的执行顺序

    1 查询年龄大于15的员工的姓名 年龄 并根据年龄进行升序排序 select name age from emp where age gt 15 order by age asc select e name e age from emp e
  • vim/vi常用命令集

    格式 指令 或指令 参数 指令解释 文件操作 vim vi 打开一个空文件 vim vi a txt 打开当前目录中的a txt文件 若文件不存在则创建一个名为a txt的文件 指定保存位置为当前目录 vim vi home a txt 打
  • SpringBoot常用注解

    一 注解 annotations 列表 SpringBootApplication 包含了 ComponentScan Configuration和 EnableAutoConfiguration注解 其中 ComponentScan让sp
  • 如何通过Tensorflow的变量赋值计算1+2+3+4+5+6+7+8

    一 导入tensorflow import tensorflow as tf 二 定义计算图 1 常量初始化 constant name tf constant value 2 变量初始化 创建变量 name variable tf Var
  • 关于maven项目多模块的打包问题的血泪经历(必看)

    最近公司使用springboot开发项目 使用的构建工具是maven 项目分了很多模块 并且模块之间还存在一定的依赖 比如说一个项目common是提供各项目通用的工具类 公共的类等 例子 项目root 有module common fron
  • Linux编译CPU版本的caffe

    Linux编译CPU版本的caffe caffe框架的编译过程是比较复杂 本人在编译过程中也遇到过比较多的坑 这里把我的经验记录下来 希望大家可以少走点弯路 如果大家觉得此教程有用 记得订阅点赞加分享哦 1 下载caffe 通过git克隆下
  • Vue中天地图的基本引入

    注 如不需要左下角 天地图 文字 找到对应的样式 隐藏即可 index html
  • microsoft WINDOWS 系统错误代码 [收藏]

    MS Windows Error Messages Code Error Message 0 操作成功完成 1 功能错误 2 系统找不到指定的文件 3 系统找不到指定的路径 4 系统无法打开文件 5 拒绝访问 6 句柄无效 7 存储控制块被
  • 【react】string类型的ref(过时的api,可能会在未来的版本中移除,不推荐使用)

    ref可用来获取组件标签的dom节点 给组件标签绑定ref 组件的实例对象上有个属性叫做refs 组件标签上绑的ref值就会显示在refs中 div div
  • 《深入理解计算机系统》实验六Shell Lab 下载和官方文档机翻

    前言 深入理解计算机系统 官网 http csapp cs cmu edu 3e labs html 该篇文章是 实验六Shell Lab的Writeup shlab pdf 机翻 原文 http csapp cs cmu edu 3e s
  • [笔记] Unikernel原型:Docker镜像秒变虚拟机镜像以及无ssh开terminal调试

    现如今docker run各种流行 可是虚拟机并没有消退 有没有办法把镜像部署成一个虚拟机来个暂时的转换呢 有没有好办法在没有ssh的container上可以开个terminal进行调试呢 其实很简单 docker save就可以把整个镜像
  • 必看:主线剧情系列的循序渐进的查看顺序

    必看 主线剧情 系列 的循序渐进的查看顺序 主线剧情 Linux 系列 为嵌入式 Linux 的学习记录 仓库地址 Github Gitee 一开始可以鸟瞰一下 ARM 系列处理器的当前局面 主线剧情 番外01 ARM系列快速鸟瞰 首先是基
  • php短信接口开发经验及具体开发实现

    一 群发短信mt 参数名称 说明 是否必须 备注 Sn 软件序列号 是 格式XXX XXX XXX XXXXX Pwd 密码 是 md5 sn password 32位大写密文 Mobile 手机号 是 必填 支持10000个手机号 建议
  • Centos 7安装mysql

    1 安装前清理工作 1 1 1 清理原有的mysql数据库 使用以下命令查找出安装的mysql软件包和依赖包 rpm pa grep mysql 显示结果如下 mysql80 community release el7 1 noarch m
  • c++中用各种不同的方法来实现交换函数

    今天来学习一下c 中用各种不同的方法来实现交换函数 第一 include