今天第一次写博客,写博客也是为了记录一天所学的总结把,或多或少。
直接进入正题,今天主要学的是模板;
首先是函数模板,在此之前回顾一下常规函数的定义:
return_type function_name(arguments){
/*function body*/
}
但是在需要参数类型不同,但是函数功能相同时,你需要重载多个函数来实现它:
int max(int32_t a, int32_t b){
return a > b ? a : b;
}
double max(double a, double b){ return a > b ? a : b; } //...
这样的写法相当奇怪。函数模板就是用来处理这样的情况,它的定义是这样的:
template<typename T>
retruntype function_name(arguments){
/*function body*/
}
还是拿上面的max来打比方,函数模板下的max函数是这样的:
template<typename T>
T max(T a, T b){
return a > b ? a : b;
}
下面是它的一些解释:
int main() {
int32_t a = 10, b = 20;
double c = 10.2, d = 10.1; max(a, b); //调用的是int32_t max(int32_t, int32_t) max(c, d); //调用的是double max(double, double) return 0; }
当然函数模板也有一些其他的功能如,如标准库begin和end的实现:
template<typename T, size_t N>
T* my_begin(T (&x)[N]) {
return &x[0];
}
template<typename T, size_t N> T* my_end(T (&x)[N]) { return &x[0] + N; }
类模板也类似:
template<typename T>
class class_name{
/*class body*/ };
留给名的一个问题:
在上面max函数中如果传入的是两个迭代器,他的问题怎么解决。