C++基础算法之交换(Swap)

最近刚开始学习C++一些简单算法,仅在此作以记录。

C++交换算法一般来说共有4种方法,分别是0、传值调用(并不能实现,在此作以标记),1、传指针(址)调用2、定义一个宏函数3、引用4、模板。其中方法1、2在C/C++中均可以实现,方法3、4仅C++实现,相比方法1、2更为简单。

0、传值调用(不能实现交换)

如想要将int型的a,b值进行交换,调用swap(a,b),
不能实现的原因是按值传递相当于将a,b的拷贝传到函数中,但实际上a,b的值并没有替换。

void Myswap(int x, int y)
{
	int temp;
	temp = x;
	x = y;
	y = temp;
}

1、传指针(址)调用

void Myswap(int *px, int* py)
{
	int temp;
	temp = *px;
	*px = *py;
	*py = temp;
}

2、定义一个宏函数

#define MYSWAP(x,y,t) ((t)=(x),(x)=(y),(y)=(t)) 

3、引用(即别名)

void Myswap(int &x, int &y)
{
	int temp;
	temp = x;
	x = y;
	y = temp;
}

4、模板

每写一个模板函数都需要一个template关键词,class后可以有多个T,如T1,T2,T3
调用:直接调用或者显式地指定类型 如Myswap(a,b)

template<class T>
void Myswap(T& a, T& b)
{
	T temp = a;
	a = b;
	b = temp;
}

测试:

int main()
{
	int a = 1, b = 10;
	//传址调用
	Myswap(&a, &b);
	cout << a << "|" << b << endl;
	//宏定义
	int temp;
	MYSWAP(a, b, temp);
	cout << a << "|" << b << endl;
	//引用
	Myswap(a, b);
	cout << a << "|" << b << endl;
	//模板
	Myswap(a, b);
	cout << a << "|" << b << endl;

	return 0;
}

你可能感兴趣的:(C++)