C++ 中有几种交换变量的方法?交换变量的方法定义宏代码块定义函数编程实验: 变量的交换#include <iostream>#include <string>using namespace std;#define SWAP(t, a, b) { \ t c = a; \ a = b; \ b = c; }while{0}void Swap(int& a, int& b){ int c = a; a = b; b = c;}void Swap(double& a, double& b){ double c = a; a = b; b = c;}void Swap(string& a, string& b){ string c = a; a = b; b = c;}int main(){ int a = 0; int b = 1; Swap(a, b); cout << “a = " << a << endl; cout << “b = " << b << endl; double m = 2; double n = 3; Swap(m,n ); cout << “m = " << m << endl; cout << “n = " << n << endl; string d = “D.T.”; string t = “Software”; Swap(d, t); cout << “d = " << d << endl; cout << “t = " << t << endl; return 0;}输出:a = 1b = 0m = 3n = 2d = Softwaret = D.T.定义宏代码块优点: 代码复用,适合所有的类型缺点:编译器不知道宏的存在,缺少类型检查定义函数优点: 真正的函数调用,编译器对类型进行检查缺点: 根据类型重复定义函数,无法代码复用新的需求:C++ 中有没有解决方案集合两种方法的的优点呢?泛型编程泛型编程的概念不考虑具体数据类型的编程方式对于 Swap 函数可以考虑下面的泛型写法void Swap(T& a, T& b){ T t = a; a = b; b = t;}Swap 泛型编程中的 T 不是一个具体的数据类型,而是泛指任意的数据类型。函数模板C++ 中泛型编程函数模板一种特殊的函数可用不同类型进行调用看起来和普通函数很相似,区别是类型可被参数化template<typename T>void Swap(T& a, T& b){ T t = a; a = b; b = t;}函数模板的语法规则template 关键字用于声明开始进行泛型编程typename 关键字用于声明泛指类型函数模板的使用自动类型推导调用具体类型显示调用void code(){ int a = 0; int b = 1; Swap(a, b); // 自动推导 float c = 2; float d = 3; Swap<float>(c, d); // 显示调用}编程实验: 函数模板使用初探#include <iostream>#include <string>using namespace std;template < typename T >void Swap(T& a, T& b){ T c = a; a = b; b = c;}template < typename T >void Sort(T a[], int len){ for(int i=0; i<len; i++) { for(int j=i; j<len; j++) { if( a[i] > a[j] ) { Swap(a[i], a[j]); } } }}template < typename T >void Println(T a[], int len){ for(int i=0; i<len; i++) { cout << a[i] << “, “; } cout << endl;}int main(){ int a[5] = {5, 4, 3, 2, 1}; Println<int>(a, 5); Sort<int>(a, 5); Println<int>(a, 5); string s[5] = {“Java”, “C++”, “Pascal”, “Ruby”, “Basic”}; Println(s, 5); Sort(s, 5); Println(s, 5); return 0;}输出:5, 4, 3, 2, 1, 1, 2, 3, 4, 5, Java, C++, Pascal, Ruby, Basic, Basic, C++, Java, Pascal, Ruby, 小结函数模板是泛型编程在 C++ 中的应用方式之一函数模板能够根据实参对参数类型进行推导函数模板支持显示的指定参数类型函数模板是 C++ 中重要的代码复用方式以上内容参考狄泰软件学院系列课程,请大家保护原创!