c++ 模板元
来源:互联网 发布:新手开淘宝店用多少钱 编辑:程序博客网 时间:2024/06/05 03:31
c++ 模板元
普通递归
#include<iostream>int getdata(int n){if (n == 1 || n == 2){return 1;}else{return getdata(n - 1) + getdata(n - 2);}}void main(){//40 得102334155std::cout << getdata(40) << std::endl;std::cin.get();}
简单的模板元
#include<iostream>template<int N>struct data{enum a{res = data<N-1>::a::res+data<N-2>::a::res};};template<>struct data<1>{enum a{res = 1};};template<>struct data<2>{enum a{res = 1};};int getdata(int n){if (n == 1 || n == 2){return 1;}else{return getdata(n - 1) + getdata(n - 2);}}void main(){//用了模板元int num = data<45>::res;std::cout << num << std::endl;//普通递归std::cout << getdata(30) << std::endl;std::cin.get();}
总结
#include<iostream>//模板元吧运行时消耗的时间,在编译期间优化template<int N>struct data{enum a{ res = data<N - 1>::a::res + data<N - 2>::a::res };};template<>struct data<1>{enum a{res =1};};template<>struct data<2>{enum a{res= 1 };};//1 1 2 3 5 7int getdata(int n){if (n==1 || n==2){return 1;} else {return getdata(n - 1) + getdata(n - 2);}}void main(){const int myint = 40;int num = data<myint>::res;//<>内部不可以有变量std::cout << num << std::endl;std::cout << getdata(40) << std::endl;std::cin.get();}//主要思想////利用模板特化机制实现编译期条件选择结构,利用递归模板实现编译期循环结构,模板元程序则由编译器在编译期解释执行。////优劣及适用情况////通过将计算从运行期转移至编译期,在结果程序启动之前做尽可能多的工作,最终获得速度更快的程序。也就是说模板元编程的优势在于:////1.以编译耗时为代价换来卓越的运行期性能(一般用于为性能要求严格的数值计算换取更高的性能)。通常来说,一个有意义的程序的运行次数(或服役时间)总是远远超过编译次数(或编译时间)。////2.提供编译期类型计算,通常这才是模板元编程大放异彩的地方。////模板元编程技术并非都是优点:////1.代码可读性差,以类模板的方式描述算法也许有点抽象。////2.调试困难,元程序执行于编译期,没有用于单步跟踪元程序执行的调试器(用于设置断点、察看数据等)。程序员可做的只能是等待编译过程失败,然后人工破译编译器倾泻到屏幕上的错误信息。////3.编译时间长,通常带有模板元程序的程序生成的代码尺寸要比普通程序的大,////4.可移植性较差,对于模板元编程使用的高级模板特性,不同的编译器的支持度不同。
0 0
- 【C++】traits技术与模板元编程
- 模板元
- 【C/C++】C++模板元编程 入门简介
- 模板--模板元编程
- Lightoj 1067【逆元模板(求C(N,M))】
- “模板类与友元”那些事(C++)
- 模板特例和模板元
- 初探模板元编程
- 模板元编程
- C++模板元编程
- 模板元编程
- 模板元编程
- C++模板元编程
- C++模板元编程
- 友元 + 模板
- 模板友元函数
- 模板元编程-C++
- C++模板元编程
- EditText和TextView小知识
- 周易六十四卦——恒卦
- synchronized关键字
- CentOS 6.3下rsync服务器的安装与配置
- 两种数组排序方法
- c++ 模板元
- 总结单片机软件抗干扰的几种办法
- 解析深度学习的未来十大趋势
- 【c++程序】图片整理
- 拾遗系列(九)RunLoop
- 如何在微信公众号开发中实现图片裁剪
- 《Nodejs开发加密货币》之二十:关于时间处理的相关问题
- git-github管理代码
- java/数组排序/冒泡排序/选择排序/二分查找/Arrays/进制转换/装箱/拆箱/