C ++関数テンプレート(1)
昨日、ようやく関数テンプレートの章を学び終えて、関数テンプレートのとても良い例を整理しました。今日は、今週取ったメモを順番に整理し始めました。覚えているので、今日は整理します。 。関数テンプレートの基本構文、関数テンプレートの注意事項、および関数テンプレートのケース配列の並べ替え、これら3つの部分。
01. template-templateの概念は
、汎用性の高いフレームワークにすぎませんが、直接使用することはできません。
役割:一般的な関数を確立するために、関数の戻り値の型と仮パラメーターの型を具体的に指定することはできません。仮想型で表されます。
目的:再利用性を改善し、タイプをパラメーター化します。
02、関数テンプレートの基本構文
template<typename T>
template-テンプレートを作成することを宣言します。
typename-その背後にある記号がデータ型であることを示します。データ型はクラスで置き換えることができます。
T-一般的なデータ型。名前は、通常は大文字で置き換えることができます。
特定のテストケース:
#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;
}
//因为有太多数据类型,一个一个写太过麻烦,所以引出函数模板的应用
template<typename T>//函数模版,后面紧跟一个T,就是先声明,后面如果出现T了先不要报错
void myswap(T &a,T &b)//同样先声明一个函数,但不确定数据类型,用T来代表
{
T temp=a;
a=b;
b=temp;
}
//写一个利用模板的输出函数
void test03()
{
int a=10;
int b=11;
//两种输出方式
//1、自动判断法
//myswap(a,b);
//2、提示法
myswap<int>(a,b);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
}
//写一个赋值输出函数
void test01()
{
int a=11;
int b=30;
swapInt(a,b);
cout<<"交换后a的值"<<a<<endl;
cout<<"交换后b的值"<<b<<endl;
}
//再写一个浮点型输出函数
void test02()
{
double d=3.1415926535;
double t=3.3333333333;
swapDouble(d,t);
cout<<"交换后d的值"<<d<<endl;
cout<<"交换后t的值"<<t<<endl;
}
int main()
{
//test01();
//test02();
test03();
system("pause");
return 0;
}
03.関数テンプレートに関する注意事項
①自動型導出、一貫性のあるデータ型Tは、使用する前に導出する必要があります。
②テンプレートは、使用する前にTデータ型を決定する必要があります。
特定の機能テストの実装:
#include<iostream>
using namespace std;
//先把上次写的交换的函数给写出来
template<typename T>//正常写函数但之前加上模板的固定格式,,并且注意T代表的是通用相当于可以代表任意的
void myswap(T&a,T&b)
{
T temp=a;
a=b;
b=temp;
}
//自动类型推导输出型,必须推导出一致的数据类型T才可使用
void test01()
{
int a=10;
int b=20;
char c='c';
myswap(a,b);
//myswap(a,c);//错误,因为推导不出一致的数据类型T
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
}
//模板必须确定T数据类型,才可以使用
//验证
template<typename T>
void func()
{
cout<<"func 调用"<<endl;
}
//输出这个函数
void test02()
{
//func();没有用到T的数据类型,所以没办法调用该函数输出
func<int>();//确定了T的数据类型(虽然T的类型可以随意定义,因为func函数是一个空的函数)
}
int main()
{
test01();
test02();
system("pause");
return 0;
}
04.関数テンプレートの場合-配列の並べ替え配列の並べ替え
の一般的な機能を実現します。
ルール→小さい
アルゴリズムから大きいアルゴリズムへ→
テストの選択→char配列、int配列
固有のコードの実装:
#include<iostream>
#include<string>
using namespace std;
//目的:实现通用的对数组进行排序的函数
//规则:从小到大
//算法:选择
//测试:char 数组、int数组
//函数交换模板
template<typename T>
void myswap(T a,T b)
{
int temp =a;
a=b;
b=temp;
}
//选择排序函数模板
template<typename T>
void mysort(T arr,int len )
{
for(int i=0; i<len;i++)
{
//假设i项为最小项
int min=i;
for(int j=i+1;j<len;j++)
{
//将第i项与第j项进行比较
//
if(arr[min]>arr[j])
{
//交换两个数组的下标
myswap(arr[i],arr[j]);
}
}
}
}
//输出函数模板
template<typename T>
void myprint(T arr[],int len )//len一定是int型,如果也写成T则会造成不一致现象无法输出
{
for(int i=0;i<len;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}
//测试函数
void test01()
{
char charArr[]="acbed";
int len=sizeof(charArr)/sizeof(char);
mysort(charArr,len);
myprint(charArr,len);
}
int main()
{
test01();
system("pause");
return 0;
}
発生するマイナーな問題
1.2桁の数に注意してください
2.関数は事前に宣言されてい
ますintmainはコードを記述するための呼び出しです3.Cout出力、未定義の識別子または関数構造の問題
4。 char配列の書き込みをテストします:char charArr [] = ""
5.配列の長さの計算:int num = sizeof(charArr)/ sizeof(charr)
さて、最初にたくさん整理しましょう。