(C++)使用模板在编译期计算阶乘
来源:互联网 发布:知画生孩子是第几集 编辑:程序博客网 时间:2024/05/22 03:44
在编译期计算阶乘之于模板元编程(template metaprogramming) 正如 helloword 之于初学编程。
using namespace std;template <int SUM, int N>struct Mul;template <int N>struct Fact{enum { sum = Mul<Fact<N - 1>::sum, N>::sum };};template <>struct Fact<1>{enum { sum = 1 };};template <int SUM, int N>struct Mul{enum { sum = SUM + Mul<SUM, N - 1>::sum };};template <int SUM>struct Mul<SUM, 1>{enum { sum = SUM };};int main(){cout << Fact<10>::sum << endl;getchar();return 0;}
代码没有使用一个乘法,也没有一个循环语句,却能在程序运行起来之前就把10的阶乘计算出来,是不是很令人感到不可思议呢!
解释一下。Factorial(阶乘) 和 Multiplication(乘法) 这两个结构中enum(枚举类型)通过递归取得确切的值,而这一工作由于template(模板)的特性,在编译时就已经完成了。
当然上面的代码因为没有用乘法所以显得繁琐了一些,下面的代码则使用了乘法。
using namespace std;template <long N>struct fact{enum {sum = N*fact<N-1>::sum};};template <>struct fact < 1 >{enum {sum = 1};};int main(){cout << fact<10>::sum << endl;getchar();return 0;}
0 0
- (C++)使用模板在编译期计算阶乘
- 利用模板编译期计算阶乘
- 如何使用C++在编译期计算阶乘
- TMP(Template metaprogramming)模板元编程的起手程序:编译期计算阶乘
- C/C++ 使用宏在编译期计算可变参数个数
- 模板元编程-编译期计算数值
- 在编译期完成数值计算
- 编译时计算、模板元计算,还有递归在模板中的使用
- 编译期三角函数计算
- C 使用宏 编译期 二进制表示
- 使用递归计算阶乘
- 使用模板特化定义C++编译期警告
- factor.c -- 使用循环和递归计算阶乘
- C语言使用递归法计算n的阶乘
- 编译期类型计算示例
- c语言 分数阶乘计算
- 使用递归算法计算阶乘
- 编译期使用MAVEN
- "巴卡斯杯" 中国大学生程序设计竞赛 - 女生专场 1001-1006
- jquery cookie记住用户名和密码(使用方法)
- iOS学习- 03 控件
- 几种JS转跳页面方式
- Ubuntu利用tasksel安装配置lamp环境
- (C++)使用模板在编译期计算阶乘
- 网站系统的“用户登录”
- 利用makefile将添加的资源文件编译到Android系统中
- ACdream 1071 神奇的%系列一 筛选法
- ActionContext和ServletActionContext总结
- 去除tabBar的上横线和navigationBar的下横线方法介绍
- Htmlayout早期的一个摸索作品
- 浅谈HTTP中Get与Post的区别
- oracle服务进程和后台进程区别