前言
懒狗(指自己)复(yu)习最后一期了。希望不会挂科。。
函数模板
通过template关键字,指定类型,使得函数能够用统一的操作去处理。比如排序:
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
if(a[i]>a[j]) swap(a[i), a[j];
可是a
变量的数据类型可以是int数组或者是double数组。如果对不同的数组进行处理,会要编写不同参数类型的函数,这很麻烦,而函数模板可以解决这个问题。
使用template关键字,即template<class T>
指定类型T,并且在函数的参数中传入对应的类型T,可以将相同的操作套到不同类型的数据上。(T也可以是别的名字,比如Type)
排序函数模板
template<class T>
void mySort(vector<T>& a)
{
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
if(a[i]>a[j]) swap(a[i), a[j];
}
值得注意的是,函数模板要求参数必须出现指定的类型,即必须出现T (T也可以是别的名字,比如Type)
,除此之外,还可以指定多个类型,比如
template<class T1, class T2>
指定多个类型的代价是形参中出现的类的顺序必须和template中相同
类模板
类模板和函数模板类似,通过template关键字指定类型,值得注意的是,声明时要带上<>
,比如最常见的vector
vector<int> arr;
除此之外,多个类型的指定,即template<class T1, class T2>
也是可以的(比如c++的pair)。
数据排序(函数模板)
题目描述
编写一个进行升序排序的函数模板,其中数组为具有n个元素,类型为T。
注意:必须使用模板函数
输入
第一行输入t表示有t个测试实例
第二行先输入一个大写字母表示数组类型,I表示整数类型,C表示字符型,S表示字符串型,D表示双精度数类型;然后输入n表示数组长度。
第三行输入n个数据
依次输入t个实例
输出
每行输出一个结果
样例输入
4
I 10
15 3 51 27 9 35 78 14 65 8
D 3
-11.3 25.42 13.2
C 6
a b g e u q
S 4
sandy david eason cindy
样例输出
3 8 9 14 15 27 35 51 65 78
-11.3 13.2 25.42
a b e g q u
cindy david eason sandy
代码
连快排都不会了,我爬
#include <iostream>
#include <string>
#include <algorithm>
#include <map>
#include <cmath>
#include <iomanip>
#include <vector>
#include <set>
using namespace std;
template<class T>
void mySort(vector<T>