高手来解释下 swap 函数.

来源:百度知道 编辑:UC知道 时间:2024/05/31 13:39:48
#include <iostream>

using namespace std;

void Swap(int a,int b) //自己写个Swap,区别于系统的swap
{
int temp=a;
a=b;
b=temp;
}

void main()
{
int a1=100,b1=200;
int a2=100,b2=200;
Swap(a1,b1);
swap(a2,b2);
cout<<"a1 = "<<a1<<ends<<"b1 = "<<b1<<endl;
cout<<"a2 = "<<a2<<ends<<"b2 = "<<b2<<endl;
}

运行结果:a1 = 100 b1 = 200
a2 = 200 b2 = 100

哪位朋友来解释一下。。
帮忙来解释一下系统的swap的函数机制、

你的第二个(s)wap,s小写了,这是系统的sawp.
你自己编的Swap()并没有将交换后的a,b值传回a1,b1,因此a1,b1的值不交换.
注意看看书上关于函数参数的内容.

库函数swap
// TEMPLATE FUNCTION swap (from <algorithm>)
template<class _Ty> inline
void swap(_Ty& _Left, _Ty& _Right) //这里的&表示_Left,_Right是引用
{ // exchange values stored at _Left and _Right
if (&_Left != &_Right) //这里的&是取变量的地址
{ // different, worth swapping
_Ty _Tmp = _Left;

_Left = _Right;
_Right = _Tmp;
}
}

这段程序的思路其实很简单,就是传进来两个参数,_Left, _Right,若两者的地址不相同,则交换.
与你的Swap()不同的是,他将_Left定义为第一个参数(如,a)的引用,_Right为第二个参数(如,b)的引用.
这样,_Left,_Right与a,b其实等价,_Left与_Right的交换,就是a,b的交换.

你可以看看书上关于"引用"的章节
注意区分上面两个&的区别,我这里就不写了,原谅的我偷懒~~~