看学长用STL,馋疯了。
22.12.1 我又来继续学了
预备知识:模板
为了提高代码的重用性,C++中引入了泛型编程的概念,泛型编程的基础就是模板。
模板函数
基本语法
1 2 3 4 5
| template<typename T> void func( T a) { return; }
|
其中 T可任意更换,typename 可换为 class
在调用的时候,必须给模板函数确定的数据类型
分为自动推断和明确给出两种
1 2 3 4 5
| int a; func(a);
func<int>(a);
|
如此便实现了将数据类型作为函数的参数
例程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #include <bits/stdc++.h> using namespace std;
template<typename T> void mysort(T arry[],int len) { for(int xi=0; xi<len; xi++) { for(int yi=0; yi<len; yi++) { if(arry[xi]>arry[yi]) { T c; c=arry[xi],arry[xi]=arry[yi],arry[yi]=c; } } } for(int xi=0; xi<len; xi++) cout<<arry[xi]<<" "; return; }
void test() { int arryint[]= {5,3,7,8,2,9,0}; char arrychar[]="ILOVEYOU"; int len1=sizeof(arryint)/sizeof(int) ,len2=sizeof(arrychar)/sizeof(char); mysort(arryint,len1); mysort(arrychar,len2); return; }
int main() { test(); return 0; }
|
注意事项
关于调用函数时参数发生的类型转换
关于函数重载的调用规则
如果函数模板和普通函数都可以实现,优先调用普通函数
可以通过空模板参数列表来强制调用函数模板
函数模板可以发生重载
如果函数模板可以产生更好的匹配,优先调用函数模板
容器
一、vector
参考链接
C++ STL总结 | 行码棋 (wyqz.top)