c++函数模板 引用交换和指针交换类模板

函数模板

模板技术,类型参数化,编写代码可以忽略类型
为了让编译器区分是普通函数还是模板函数

// 模板.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
using namespace std;
template<typename T>//template<class t>
//告诉编译器,下边是模板函数
void Myswap(T*a, T*b)
{
	T temp= *a;
	*a = *b;
	*b = temp;
	//cout << "in a=" << *a << "  b=" << *b << endl;
}
template<typename T>
void Myswap1(T&a, T&b)
{
	T temp = a;
	a = b;
	b = temp;
}
void test()
{
	int a = 10, b = 20;
	double c = 3.0, d = 4.0;
	cout << "a=" << a << "  b=" << b << endl;
	//1.自动类型推导
	Myswap(&a, &b);
	cout << "a=" << a << "  b=" << b << endl;
	cout << "c=" << c << "  d=" << d<< endl;
	//1.自动类型推导,编译器根根据传的值自动推导类型
	Myswap1(c, d);
	cout << "c=" << c << "  d=" << d << endl;
	//2显示指定类型
	Myswap1<int>(a,b);//不能传 c,d
}
int main()
{
	test();
    return 0;
}


****函数模板不允许自动类型转换,普通模板可以进行自动类型转换
函数模板可以被重载
编译器优先考虑普通函数,如果模板可以产生更好好的匹配,那么选择模板,如果一定要调用模板,那么要
MyAdd<>(a,b)//加尖括号


类模板

// 模板.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
using namespace std;
template<typename T>
class Person {
public:
	Person(T id, T age)
	{
		cout << "hhh" << endl;
		this->id = id;
		this->age = age;
	}
	void show()
	{
		cout << "id " << id << "age" << age << endl;
	}
private:
	T id;
	T age;
};
void test01()
{
	//函数模板在调用时可以自动类型推导
	//类模板必须显示指定类型
	Person<int> p(10, 20);
	p.show();
}

int main()
{
	test01();
    return 0;
}


对char类型和int类型数组进行排序

// 模板.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
using namespace std;
template<class T>
void print(T *arr, int len)
{
	for (int i = 0; i < len; i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;
}
template<typename T>
void mysort(T *arr, int len)
{
	for (int i = 0; i < len; i++)
	{
		for (int j = i + 1; j < len; j++)
		{
			//从大到小排序
			if (arr[i] < arr[j])
			{
				T temp;
				temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
	}
}
int main()
{
	int arr[] = { 1,5,4,2,3,9,6,8 };
	int len = sizeof(arr)/sizeof(int);//总长度/单位长度=个数
	print(arr, len);
	mysort(arr, len);
	print(arr, len);
	char ch[] = { 'a','h','b','p' };
	int len1 = sizeof(ch) / sizeof(char);
	print(ch, len1);
	mysort(ch, len1);
	print(ch, len1);
	return 0;
}


发布了26 篇原创文章 · 获赞 2 · 访问量 2159

猜你喜欢

转载自blog.csdn.net/weixin_41375103/article/details/104551446