日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【C++深度剖析教程40】使用数值型模板技术计算1+2+3+...+N的值

發布時間:2023/12/10 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++深度剖析教程40】使用数值型模板技术计算1+2+3+...+N的值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇文章學習了數值型模板技術,并利用相關技術,實現了C++的數組類模板。點擊文章查看上一篇文章:點擊鏈接查看

本篇文章,繼續利用模板技術來解決一個問題。

如果想求1+2+3+…+N的結果,有很多種方法。可以循環遍歷,可以直接使用公式求解。但是他們都不是最快的方法,我們今天使用模板技術,來最快速的求出結果。

1、回顧

模板參數可以是數值型參數。也就是非類型參數。如下圖所示:

我們可以像上面定義一個局部數組,但是卻不能這樣定義:

int n=10; func<double,n>();

上面這種寫法就是錯的!!!

實際上,不光是類型參數不能為數值型模板參數,下面幾種情況也不能作為模板參數

  • 浮點數不能作為模板參數
  • 變量不能作為模板參數(上面的int n)
  • 類對象不能作為模板參數

實際上,數值型模板參數是必須在編譯階段被處理的單元,因此在編譯階段數值型模板參數必須被準確無誤的確定。向上面的變量,類對象等,都是只有在運行的時候才能夠被確定的,所以不能作為數值型模板的參數。

2、解決方法

如果想求1+2+3+…+N的結果,有很多種方法。可以循環遍歷,可以直接使用公式求解。但是他們都不是最快的方法,我們今天使用模板技術,來最快速的求出結果。

先上代碼,看看如何最快速求解:

#include <iostream> #include <string>using namespace std;template < int N > //這里是數值型模板參數 class Sum { public:static const int VALUE = Sum<N-1>::VALUE + N; //這里是一個遞歸的過程 };/* 遞歸過程的終止條件 */ template < > class Sum < 1 > { public:static const int VALUE = 1; };int main() {cout << "1 + 2 + 3 + ... + 10 = " << Sum<10>::VALUE << endl;cout << "1 + 2 + 3 + ... + 100 = " << Sum<100>::VALUE << endl;return 0; }

上面的代碼運行結果為:

很明顯,結果完全正確!!!

那么為什么它是最快的方法呢?

首先,我們知道,數值型模板參數都是在編譯階段確定了的,所以,上述代碼的VALUE實際上是在編譯的時候,就已經確定好了值,最后直接調用這個值,就是計算結果。這肯定比任何計算都要快(這歸功于編譯器,編譯器為我們做了很多事)。

本文參考狄泰軟件學院相關課程
想學習的可以加狄泰軟件學院群,
群聊號碼:199546072

學習探討加個人(可以免費幫忙下載CSDN資源):
qq:1126137994
微信:liu1126137994

總結

以上是生活随笔為你收集整理的【C++深度剖析教程40】使用数值型模板技术计算1+2+3+...+N的值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。