使用模板能够极大到使得代码可重用。

记录一下,方便后续使用。

1. 函数模板,支持多种类型参数

 #include <stdio.h>
#include <math.h> //函数模板
template <class T>
T add(T a, T b){
return a + b;
} //函数模板特殊化
template <>
double add<double>(double a, double b){
return floor(a + b);
} class Vector{
public:
Vector(int a = , int b = ):_a(a), _b(b) { }
Vector operator +(Vector &v1){ //重载+
Vector res;
res._a = this->_a + v1._a;
res._b = this->_b + v1._b;
return res;
} int _a;
int _b;
}; int main (){
printf("3 + 4 = %d\n", add(, )); //支持int
printf("5.6 + 3.7 = %.0lf\n", add(5.6, 3.7)); //支持double Vector v1(,);
Vector v2(,);
Vector v3 = add(v1, v2); //支持类
printf("v3(%d, %d)\n", v3._a, v3._b);
return ;
}

2. 迭代器模板,支持多种容器

 #include <iostream>
#include <vector>
#include <list> //该模板函数, 支持各种容器到数据打印
template <class iterator>
void print(iterator begin, iterator end){
for(iterator it = begin; it != end; ++it){
std::cout << *it << std::endl;
}
} //使用迭代器需要添加关键字typename
//该模板函数, 支持各种容器到数据打印
template <class container>
void print(container con){
for(typename container::iterator it = con.begin(); it != con.end(); ++it){
std::cout << *it << std::endl;
}
} int main (){
std::vector<int> my_ver;
my_ver.push_back();
my_ver.push_back();
my_ver.push_back();
print(my_ver.begin(), my_ver.end()); std::list<std::string> my_list;
my_list.push_back("No.1");
my_list.push_back("No.2");
my_list.push_back("No.3");
print(my_list);
return ;
}

3.类模板

test_temple.h

 #ifndef MATH_CLASS
#define MATH_CLASS template <class T>
class Math{
public:
static T add(T v1, T v2){ //方法在类内声明+实现
return v1 + v2;
} static T sub(T v1, T v2); //方法在类内声明
}; #endif

test_temple.cpp

 #include "test_temple.h"

 #ifndef MATH_CPP
#define MATH_CPP template <class T>
T Math<T>::sub(T v1, T v2){
return v1 - v2;
} #endif

test.h

 //模板类到声明、实现都必须被编译时包含
//1.可以将实现都写到头文件
//2.或者同时包含.h , .cpp文件 //这里把他们了封装, 用户只需要包含test.h即可
#include "test_temple.h"
#include "test_temple.cpp"

main.cpp

 #include <stdio.h>
#include "test.h" int main(){
printf("3 + 4 = %d\n", Math<int>::add(, ));
printf("20.8 - 5.1 = %.2lf\n", Math<double>::sub(20.8, 5.1));
return ;
}

C++ 模板学习 函数模板、类模板、迭代器模板的更多相关文章

  1. C++模板类内友元(友元函数,友元类)声明的三种情况

    根据<C++ Primer>第三版16.4节的叙述,C++类模板友元分为以下几种情况 1.非模板友元类或友元函数. 书上给了一个例子: class Foo{     void bar(); ...

  2. 转:C++模板学习

    C++ 模板 转:http://www.runoob.com/cplusplus/cpp-templates.html 2018-01-05 模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的 ...

  3. tornado-模板继承extend,函数和类的导入

    大 import tornado.ioloop import tornado.web import tornado.httpserver # 非阻塞 import tornado.options # ...

  4. C++模板学习:函数模板、结构体模板、类模板

    C++模板:函数.结构体.类 模板实现 1.前言:(知道有模板这回事的童鞋请忽视) 普通函数.函数重载.模板函数 认识. //学过c的童鞋们一定都写过函数sum吧,当时是这样写的: int sum(i ...

  5. 《C++ Primer Plus》第16章 string类和标准模板库 学习笔记

    C++提供了一组功能强大的库,这些库提供了很多常见编程问题的解决方案以及简化其他问题的工具string类为将字符串作为对象来处理提供了一种方便的方法.string类提供了自动内存管理动能以及众多处理字 ...

  6. 3.2 STL中的函数对象类模板

    *: STL中有一些函数对象类模板,如下所示: 1)例如要求两个double类型的x 和y 的积,可以: multiplies<double>()(x,y); 该表达式的值就是x*y的值. ...

  7. C++学习笔记36:类模板

    类模板的目的 设计通用的类型式,以适应广泛的成员数据型式 类模板的定义格式 template<模板形式参数列表>class 类名称{...}; 原型:template<typenam ...

  8. C++中模板类使用友元模板函数

    在类模板中可以出现三种友元声明:(1)普通非模板类或函数的友元声明,将友元关系授予明确指定的类或函数.(2)类模板或函数模板的友元声明,授予对友元所有实例的访问权.(3)只授予对类模板或函数模板的特定 ...

  9. 初步C++类模板学习笔记

    类模板 实现:在上课时间的定义给它的一个或多个参数,这些参数代表了不同的数据类型.                              -->抽象的类. 在调用类模板时, 指定參数, 由编 ...

随机推荐

  1. linux学习笔记-11.正则表达式

    1.cut截取以:分割保留第七段 grep hadoop /etc/passwd | cut -d: -f7 2.排序 du | sort -n 3.查询不包含hadoop的 grep -v hado ...

  2. JedisConnectionException: java.net.ConnectException: Connection refused

    出现问题 我遇到的一个问题,在连接redis的时候出现了错误!错误如下: JedisConnectionException: java.net.ConnectException: Connection ...

  3. hdu 5753 Permutation Bo 水题

    Permutation Bo 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5753 Description There are two sequen ...

  4. 独家专访|浙江执御:为何接受富安娜入股而不选VC?_深圳市跨境电子商务协会_新浪博客

    独家专访|浙江执御:为何接受富安娜入股而不选VC?_深圳市跨境电子商务协会_新浪博客   http://blog.sina.com.cn/s/blog_13cb5d69e0102vuvk.html

  5. word如何插入和删除脚注,尾注

    在我们日常使用word时,经常会使用到脚注/尾注来对文中某些文字或内容进行注释或是重点说明,效果挺好,挺直观和明显.但是很多人并不会使用,特别是当需要删除脚注事,就特别苦恼了,那根小横线怎么也删除不掉 ...

  6. PHP上传文件大小限制的问题(转)

      在用PHP进行文件上传的操作中,需要知道怎么控制上传文件大小的设置,而文件可传大小是受到多种因素制约的,现总结如下:1.php.ini:upload_max_filesize 所上传的文件的最大大 ...

  7. HDU 4511 小明系列故事——女友的考验 (AC自动机+DP)

    小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...

  8. USBDM RS08/HCS08/HCS12/Coldfire V1,2,3,4/DSC/Kinetis Debugger and Programmer -- Driver Install

    Installation of USBDM USB drivers for Windows There are four installers provided: USBDM_Drivers_x_x_ ...

  9. delphi连接mysql不用添加DSN(mysql connector odbc 5.1版)

    一.下载安装mysql驱动http://mysql.com/downloads/connector/odbc/二.添加adoconnection,adoquery,使用以下连接字符串http://ww ...

  10. Android:活动的启动模式

    启动模式一共有四种,分别是 standard .singleTop . singleTask 和 singleInstance , 可 以 在 AndroidManifest.xml 中 通 过 给 ...