【C++基础】泛化编程之template(模版基础)

前言

之前本科学习C++的时候,感觉自己还是对C++的知识有一点浅显的认识,稍微深层一点的理解还有一些欠缺。
在我看STL源码解析的时候,由于C++基础不扎实,造成阻碍。因此,在边刷题的时候,就边进行C++的学习和复习。其实在用STL的时候,就有一点很好奇那就是为什么vector支持多种类型的定义,比如int、int_64、double等等,这些类型的定义是通过什么实现的。这个就需要理解C++的基础,泛化。
自己的碎碎念:
1)其实之前在复习并且深入理解C++的时候,也有看过相关视频,我就是找的C++基础班、进阶班这种课程,采用跟着视频从头学到尾的方式,每次学习的时候比较煎熬,视频很少有看完的。
2)后来逐渐改成,在学习其他内容的时候,看到不懂的地方,带着问题和好奇的方式去学C++基础知识。这样在学习过程中会有一种恍然大悟的感觉,学习起来就不那么枯燥了。如果大家有遇到我之前学习觉得学习很枯燥的时候,不妨试试带着问题和好奇去学习~
3)带着问题去学习话,不用担心学习到知识不全面,因为你在解决的这个问题的时候,会发现你其他不熟悉的点,然后下一个就去解决其他不熟悉的问题。就像一个网慢慢铺开的那种,越扩越大,积累的多了,知识点就全了。

一、什么是模版&泛型编程

1、概念理解:
1)动态绑定:把编译时间的事情放到运行的时候去做(eg 多态:提供可扩展 高可扩展性)
2)模版元编程:把运行时间的事情放在编译时候(高性能)
在运行的时候能够动态实现的过程,挪到编译的时候去实现,用编译的时间去换取运行的时间,那么运行的时间就快了。
在编译的时候,更能保证语法安全。并且在编译的时候可以帮你生成代码,这个就是模版。

2、模版入门:
1)模版是泛化的基础,泛型编程即以一种独立于任何特定类型的编程。
C++在定义变量的时候都需要考虑变量的类型。那泛型编程即字面意思,即不再针对某一类型进行编程,对于任何类型都使用,更关注于算法。
这也就对应前面比较好奇的点,vector< int >、vector< double >的实现。
同时,在看STL源码解析的时候,好奇 迭代器的实现,这个就是泛型编程的例子,使用了模版的概念。
2)可以用来定义模版函数和模版类

二、函数模版

1、函数模版的定义

template <class type>
ret-type func-name(parameter list)

2、函数模版的例子
相关介绍和注意点可以参考代码注释

//函数模版的实现
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;

//涉及内联函数
template <typename T>
inline T const& Max(T const& a, T const& b)
{
   
    //在返回参数类型的时候,最好返回的是引用类型
    //这样可以避免不必要的 复制构造函数
    return a < b ? b : a;
}

int main(int argc, const char * argv[]) {
   
    int i = 39;
    int j = 20;
    //此时在执行的时候,编译器会寻在对应的Max<int,int>方法
    //没有找到对应的方法,但是匹配到了Max(T const& a, T const& b)
    //因此编译器在编译的时候将 template<templatename T>,T替换为int
    //因此此时变为了Max<int,int>,这里的int是根据入参i,j的类型决定的
    cout<<"Max(i,j)"<<Max(i,j)<<endl;
    double f1 = 20;
    double f2 = 30;
    //当入参为浮点类型的时候,处理过程也是一样的
    //在编译的时候,Max此时被替换为Max<double, double>
    cout<<"Max(f1, f2)"<<Max(f1, f2)<<endl;
    string str1 = "Hello";
    string str2 = "world";
    cout<<"Max(f1, f2)"<<Max(str1, str2)<<endl;
    std::cout << "Hello, World!\n";
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值