搜狐网站建设的建议,网站开发平台开发,项目实施方案计划书,建设公司网站方案上一篇文章学习了数值型模板技术#xff0c;并利用相关技术#xff0c;实现了C的数组类模板。点击文章查看上一篇文章#xff1a;点击链接查看
本篇文章#xff0c;继续利用模板技术来解决一个问题。
如果想求123…N的结果#xff0c;有很多种方法。可以循环遍历#x…上一篇文章学习了数值型模板技术并利用相关技术实现了C的数组类模板。点击文章查看上一篇文章点击链接查看
本篇文章继续利用模板技术来解决一个问题。
如果想求123…N的结果有很多种方法。可以循环遍历可以直接使用公式求解。但是他们都不是最快的方法我们今天使用模板技术来最快速的求出结果。
1、回顾
模板参数可以是数值型参数。也就是非类型参数。如下图所示
我们可以像上面定义一个局部数组但是却不能这样定义
int n10;
funcdouble,n();上面这种写法就是错的
实际上不光是类型参数不能为数值型模板参数下面几种情况也不能作为模板参数
浮点数不能作为模板参数变量不能作为模板参数上面的int n类对象不能作为模板参数
实际上数值型模板参数是必须在编译阶段被处理的单元因此在编译阶段数值型模板参数必须被准确无误的确定。向上面的变量类对象等都是只有在运行的时候才能够被确定的所以不能作为数值型模板的参数。
2、解决方法
如果想求123…N的结果有很多种方法。可以循环遍历可以直接使用公式求解。但是他们都不是最快的方法我们今天使用模板技术来最快速的求出结果。
先上代码看看如何最快速求解
#include iostream
#include stringusing namespace std;templateint N //这里是数值型模板参数
class Sum
{
public:static const int VALUE SumN-1::VALUE N; //这里是一个递归的过程
};/* 递归过程的终止条件 */
templateclass Sum 1
{
public:static const int VALUE 1;
};int main()
{cout 1 2 3 ... 10 Sum10::VALUE endl;cout 1 2 3 ... 100 Sum100::VALUE endl;return 0;
}上面的代码运行结果为 很明显结果完全正确
那么为什么它是最快的方法呢
首先我们知道数值型模板参数都是在编译阶段确定了的所以上述代码的VALUE实际上是在编译的时候就已经确定好了值最后直接调用这个值就是计算结果。这肯定比任何计算都要快这归功于编译器编译器为我们做了很多事。
本文参考狄泰软件学院相关课程 想学习的可以加狄泰软件学院群 群聊号码199546072
学习探讨加个人可以免费帮忙下载CSDN资源 qq1126137994 微信liu1126137994