swap()函数总结:

一、利用临时变量

  

  1.引用(交换任意类型)

template <typename T>

void swap(T& x,T& y)
{
T tmp;
tmp = y;
y = x;
x = tmp;
}

  2.泛型指针()

void swap(void* a,void* b )
{
int tmp;
tmp = y;
y = x;
x = tmp;
}

二、 不用临时变量交换

  1.数学运算

     1)乘

void swap (int& x,int& y)
{
x=x*y;
y=x/y;
x=x/y;
}

    2)加

void swap(int& x,int& y)
{
x=x+y;
y=x-y;
x=x-y;
}

  2.逻辑运算(相对其他的方法更高效)

void swap(int& a ,int& b)
{
x=x^y;
y=x^y;
x=x^y;
}

三、宏函数(注意不要有任何换行操作,或者使用换行符‘\’)

  

方法一:数学运算
#define swap((a),(b)) { (a) += (b); (b) =((a)-(b)) ; (a) = ((a)-(b));} #define swap((a),(b)) { (a) *= (b); (b)=((a)/(b));
(a) = ((a)/(b))} 方法二:逻辑
#define swap((a),(b)) { (a) ^= (b); (b) ^= (a);(a) ^= (b);}

swap() 函数实现的方法的更多相关文章

  1. c++下为使用pimpl方法的类编写高效的swap函数

    swap函数是c++中一个常用的函数,用于交换两对象的值,此外还用于在重载赋值运算符中处理自赋值情况和进行异常安全性编程(见下篇),标准模板库中swap的典型实现如下: namespace stl { ...

  2. 关于swap函数传值的问题

    #include <stdio.h> void swap(int * p3,int * p4); int main() {  int a = 9;  int b = 8;  int * p ...

  3. 从Swap函数谈加法溢出问题

    1.      初始题目 面试题:). 这个题目太经典,也太简单,有很多人都会不假思索结出答案: //Code 1 void Swap(int* a, int* b) { *a = *a + *b; ...

  4. 【转】 谈谈C++中的swap函数

    1,最通用的模板交换函数模式:创建临时对象,调用对象的赋值操作符. template <class T> void swap ( T& a, T& b ) { T c(a) ...

  5. 考虑写一个不抛出异常的swap函数

    我们可以调用std下的swap函数,这是一个模板函数:既可以: ; ; std::swap(a,b); cout<<"a = "<<a<<&qu ...

  6. C/C++ 错误笔记-解决swap函数与标准库的std::swap函数冲突的问题

    下午写了一份代码: #include <iostream> using namespace std; // 模板1:交换基本类型的值 template<typename T> ...

  7. @清晰掉 swap函数

    swap函数估计是一个各种各样程序都会频繁用到的子程序,可是你知道它究竟有多少种不同的写法吗?下面我就列举我知道的几种swap函数来跟大家分享一下. (1)经典型---嫁衣法 无论是写程序还是干其他事 ...

  8. C++ 常用编程--Swap函数有几种写法?

    C++ 常用编程--Swap函数有几种写法? 在说C++模板的方法前,我们先想想C语言里面是怎么做交换的. 举个例子,要将两个int数值交换,是不是想到下面的代码: void swap(int& ...

  9. (MTT)连续能量函数最小化方法

    (MTT)连续能量函数最小化方法 Multitarget tracking Multi-object tracking 连续能量函数 读"A.Milan,S. Roth, K. Schind ...

随机推荐

  1. 配置hadoop集群一

    花了1天时间最终把环境搭建好了.整理了一下,希望对想学习hadoop的有所帮助. 资料下载:http://pan.baidu.com/s/1kTupgkn 包括了linux虚拟机.jdk, hadoo ...

  2. 关于EditText的android:maxLength属性的注意事项

    一直以为在xml布局文件中对EditText添加 android:maxLength="30";属性是控制EditText字符数的.想当然的以为一个中文占2个字符,一个英文占1个字 ...

  3. C# 数组转换为DataTable 的三个方法

    C# 数组转换为DataTable 的三个方法   using System; using System.Data; namespace ArrayToDataTable { class ArrayT ...

  4. java网络编程TCP

    图片来自网络 [服务端] import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; im ...

  5. Linux特殊符号及基础正则表达式

    第1章 特殊符号 1.1 引号系列 1.1.1 单引号 所见即所得  单引号里面的内容会原封不动的输出 [root@oldboyedu50-lnb ~]# echo 'oldboy $LANG $PS ...

  6. Linux学习大纲

  7. codevs1258 关路灯(☆区间dp)

    1258 关路灯  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master     题目描述 Description 多瑞卡得到了一份有趣而高薪的工作.每天早晨他必须 ...

  8. [App Store Connect帮助]三、管理 App 和版本(2.6)输入 App 信息:新增 watchOS App 信息

    如果您的 iOS App 中包含 watchOS App,请确保您的描述中包含该 App 在 Apple Watch 上的功能.您还需要为 Apple Watch 的 App Store 提供额外的屏 ...

  9. 【洛谷4158/BZOJ1296】[SCOI2009]粉刷匠(动态规划)

    题目:洛谷4158 分析: 这题一看就是动态规划. 可以看出,如果每个木条粉刷的次数是固定的,那么这些木条是互不干扰的,因此对于每个木条可以通过dp来求出把T次中的j次分配给这个木条时可以获得的最大正 ...

  10. 题解报告:hdu 2066 一个人的旅行

    Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰 ...