函数模板

简介: 函数模板

1.平时我们在写一个函数交换的时候,常用语法

我们可以发现其会非常繁琐,在不同的数据类型之间还是要重新定义,工作量较大

#include<iostream>
using namespace std;
void swapint(int& a, int& b){
 int temp = a;
 a = b;
 b = temp;
}
void swapdouble(double& a, double& b) {
 double temp = a;
 a = b;
 b = temp;
}


2.在这里时我们要学习一个新的模板函数

template<typename T>
void myswap(T& a, T& b) {
 T temp = a;
 a = b;
 b = temp;
}
int main() {
 int a = 10;
 int b = 20;
 myswap(a, b);
 myswap<int>(a, b);
 /// <summary>
 /// myswap<int> (&:a,&:b)表示显示出转换的类型
 /// </summary>
 /// <returns></returns>
 cout << "a=" << a << endl;
 cout << "b=" << b << endl;
 return 0;
}

3.函数模板的注意事项

  A.必须确定出是相同的数据类型,才可以在一个函数当中同时使用多个变量

  B.模板必须要确定出具体的数据类型,才可以进行使用

template<class T>   //在这里typaname可以替换为class


4.函数模板案例------数组排序
选择排序


public int[] choiceSort(int[] arr){
for(int i = 0;i < arr.length;i++){
int m = i;  
for(int j = i + 1;j < arr.length;j++){
//如果第j个元素比第m个元素小,将j赋值给m  
if(arr[j] < arr[m]){
m = j;  
}
}
//交换m和i两个元素的位置  
if(i != m){
int t = arr[i];  
arr[i] = arr[m];  
arr[m] = t;  
}
}
return arr;  
}

冒泡排序:


public int[] bubbleSort(int[] arr){
for(int i = 0;i < arr.length;i++){
//比较两个相邻的元素  
for(int j = 0;j < arr.length-i-1;j++){
if(arr[j] > arr[j+1]){
int t = arr[j];  
arr[j] = arr[j+1];  
arr[j+1] = t;  
}
}
}
return arr;  
}



#include<iostream>
using namespace std;
template<class T>
void mySort(T arr[], int len) {
  for (int i = 0; i < len; i++)
  {
    for (int j = 0; j < len - i - 1; j++)
    {
      if (arr[i]> arr[j]) {
        T temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
      }
    }
  }
}
template<class T>
void Print(T arr[], int len)
{
  for (int i = 0; i < len; i++) {
    cout << arr[i] << "    " << endl;
  }
}
int main() {
  int arr[] = {1,32,12,5,98,5,656};
  int len = sizeof(arr) / sizeof(char);
  mySort(arr, len);
  Print(arr, len);
  return 0;
}

5.隐式转换

int add(int a, int b) {
 return a + b;
}
template<class T>
T addt(T a, T b) {
 return a + b;
}
int main() {
 int a = 10;
 char b = 'a';
 cout << add(a, b) << endl;
 cout << addt(a, b) << endl;
 cout << addt<int>(a, b) << endl;
 return 0;
}

在这里的时候如果参数的类型不相同,普通函数不会报错,但是模板函数会报错,但是在加入了限制数据类型<int>之后就不会报错了

6.类模板语法

#include<iostream>
#include<string>
using namespace std;
template<class Nametype,class Agetype>
class Person {
public:
 Person(Nametype name, Agetype age) {
  this->mname = name;
  this->mage = age;
 }
 void showperson() {
  cout << "mname:" << this->mname << "mname:" << this->mage << endl;
 }
public:
 Nametype mname;
 Agetype mage;
};
void showPerson() {
 Person<string, int> P("laozhichi", 19);
 P.showperson();
}
int main() {
 showPerson();
 return 0;
}

image.png

相关文章
|
10月前
|
编译器 C++
57 C++ - 函数模板
57 C++ - 函数模板
45 0
|
2月前
|
存储 编译器 程序员
|
编译器 C++
C++函数模板与类模板
C++函数模板与类模板
74 0
|
编译器 C++
【C++】什么是函数模板/类模板?
1.什么是函数模板? 函数模板简单来说就是一个模板,与函数参数的类型无关,是一个模子,不是真正的函数,实例化的函数会根据实参的类型自动推导类型。
|
存储 编译器 C++
【C++要笑着学】泛型编程 | 函数模板 | 函数模板实例化 | 类模板(二)
本章将正式开始介绍C++中的模板,为了能让大家更好地体会到用模板多是件美事!我们将会举例说明,大家可以试着把自己带入到文章中,跟着思路去阅读和思考,真的会很有意思!如果你对网络流行梗有了解,读起来将会更有意思!
133 1
【C++要笑着学】泛型编程 | 函数模板 | 函数模板实例化 | 类模板(二)
|
搜索推荐 C++
C++模板(函数模板)
C++模板(函数模板)
107 0
|
编译器 C语言 C++
【C++要笑着学】泛型编程 | 函数模板 | 函数模板实例化 | 类模板(一)
本章将正式开始介绍C++中的模板,为了能让大家更好地体会到用模板多是件美事!我们将会举例说明,大家可以试着把自己带入到文章中,跟着思路去阅读和思考,真的会很有意思!如果你对网络流行梗有了解,读起来将会更有意思!
117 0
【C++要笑着学】泛型编程 | 函数模板 | 函数模板实例化 | 类模板(一)
|
编译器 C++
初识及C++模板,总结函数模板的特点以及具体使用
初识及C++模板,总结函数模板的特点以及具体使用
144 0
初识及C++模板,总结函数模板的特点以及具体使用
|
编译器 C++
C++ 函数模板
C++ 函数模板
223 0
C++ 函数模板