博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 模板学习 函数模板、类模板、迭代器模板
阅读量:6033 次
发布时间:2019-06-20

本文共 2656 字,大约阅读时间需要 8 分钟。

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

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

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

1 #include 
2 #include
3 4 //函数模板 5 template
6 T add(T a, T b){ 7 return a + b; 8 } 9 10 //函数模板特殊化11 template <>12 double add
(double a, double b){ 13 return floor(a + b); 14 }15 16 class Vector{17 public:18 Vector(int a = 0, int b = 0):_a(a), _b(b) { } 19 Vector operator +(Vector &v1){ //重载+20 Vector res;21 res._a = this->_a + v1._a;22 res._b = this->_b + v1._b;23 return res;24 } 25 26 int _a; 27 int _b; 28 };29 30 int main (){ 31 printf("3 + 4 = %d\n", add(3, 4)); //支持int32 printf("5.6 + 3.7 = %.0lf\n", add(5.6, 3.7)); //支持double33 34 Vector v1(1,2);35 Vector v2(3,4);36 Vector v3 = add(v1, v2); //支持类37 printf("v3(%d, %d)\n", v3._a, v3._b);38 return 0;39 }

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

1 #include 
2 #include
3 #include
4 5 //该模板函数, 支持各种容器到数据打印 6 template
7 void print(iterator begin, iterator end){ 8 for(iterator it = begin; it != end; ++it){ 9 std::cout << *it << std::endl;10 } 11 }12 13 //使用迭代器需要添加关键字typename14 //该模板函数, 支持各种容器到数据打印15 template
16 void print(container con){17 for(typename container::iterator it = con.begin(); it != con.end(); ++it){18 std::cout << *it << std::endl;19 } 20 }21 22 int main (){ 23 std::vector
my_ver;24 my_ver.push_back(1);25 my_ver.push_back(2);26 my_ver.push_back(3);27 print(my_ver.begin(), my_ver.end());28 29 std::list
my_list;30 my_list.push_back("No.1");31 my_list.push_back("No.2");32 my_list.push_back("No.3");33 print(my_list);34 return 0;35 }

3.类模板

test_temple.h

1 #ifndef MATH_CLASS 2 #define MATH_CLASS 3  4 template 
5 class Math{ 6 public: 7 static T add(T v1, T v2){ //方法在类内声明+实现 8 return v1 + v2; 9 } 10 11 static T sub(T v1, T v2); //方法在类内声明12 };13 14 #endif

test_temple.cpp

1 #include "test_temple.h" 2  3 #ifndef MATH_CPP 4 #define MATH_CPP 5  6 template 
7 T Math
::sub(T v1, T v2){ 8 return v1 - v2; 9 }10 11 #endif

test.h

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

main.cpp

1 #include 
2 #include "test.h"3 4 int main(){5 printf("3 + 4 = %d\n", Math
::add(3, 4));6 printf("20.8 - 5.1 = %.2lf\n", Math
::sub(20.8, 5.1));7 return 0;8 }

 

转载地址:http://epchx.baihongyu.com/

你可能感兴趣的文章
SERVLET容器简介与JSP的关系
查看>>
《服务器SSH Public Key认证指南》-补充
查看>>
我的友情链接
查看>>
Java break continue return 的区别
查看>>
算法(Algorithms)第4版 练习 1.3.4
查看>>
jquery easyUI checkbox复选项获取并传后台
查看>>
浅析NopCommerce的多语言方案
查看>>
设计模式之简单工厂模式
查看>>
二、saltstack使用
查看>>
C++中变量的持续性、链接性和作用域详解
查看>>
2017 4月5日上午
查看>>
Python中str()与__str__、repr()与__repr__、eval()、__unicode__的关系与区别
查看>>
[NOIP2011] 观光公交
查看>>
[洛谷P3203][HNOI2010]弹飞绵羊
查看>>
Google Chrome开发者工具
查看>>
第一阶段冲刺报告(一)
查看>>
使用crontab调度任务
查看>>
【转载】SQL经验小记
查看>>
zookeeper集群搭建 docker+zk集群搭建
查看>>
Vue2.5笔记:Vue的实例与生命周期
查看>>