函数模板

简介: 函数模板

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月更文挑战第7天】
417 86
|
开发框架 前端开发 应用服务中间件
部署基于.netcore5.0的ABP框架后台Api服务端,以及使用Nginx部署Vue+Element前端应用
部署基于.netcore5.0的ABP框架后台Api服务端,以及使用Nginx部署Vue+Element前端应用
|
存储 算法 大数据
树形结构——二叉树专题总结——满二叉树,完全二叉树(堆),普通二叉树以及相应的数据管理方式(下)
树形结构——二叉树专题总结——满二叉树,完全二叉树(堆),普通二叉树以及相应的数据管理方式(下)
207 0
|
程序员
这是个测试
这是个土味情话的标签,我用程序写的诗,写给我朋友的诗,写给未来的诗。
1133 0
|
20天前
|
人工智能 自然语言处理 Shell
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
32485 121
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
|
16天前
|
人工智能 安全 机器人
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI助手,支持钉钉、飞书等多平台接入。本教程手把手指导Linux下部署与钉钉机器人对接,涵盖环境配置、模型选择(如Qwen)、权限设置及调试,助你快速打造私有、安全、高权限的专属AI助理。(239字)
6902 20
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
|
15天前
|
人工智能 机器人 Linux
OpenClaw(Clawdbot、Moltbot)汉化版部署教程指南(零门槛)
OpenClaw作为2026年GitHub上增长最快的开源项目之一,一周内Stars从7800飙升至12万+,其核心优势在于打破传统聊天机器人的局限,能真正执行读写文件、运行脚本、浏览器自动化等实操任务。但原版全英文界面对中文用户存在上手门槛,汉化版通过覆盖命令行(CLI)与网页控制台(Dashboard)核心模块,解决了语言障碍,同时保持与官方版本的实时同步,确保新功能最快1小时内可用。本文将详细拆解汉化版OpenClaw的搭建流程,涵盖本地安装、Docker部署、服务器远程访问等场景,同时提供环境适配、问题排查与国内应用集成方案,助力中文用户高效搭建专属AI助手。
4873 12

热门文章

最新文章