CSSE 板


LINE

※ 引述《jeunder (omega~ oh my god)》之銘言: : 假設有個函數 int f(int), 利用此函數計算數列的值 f(0), f(1), ..., f(N-1). : 如果 f(n) 的計算很耗費時間, 並且給定 n 值, f(n) 值就可以確定了. 通常我們 : 會建立表格陣列, 以便之後的多次引用, 不需再重複耗費計算能量 : int table[N]; : for(int i = 0; i < N; ++i) : table[i] = f(i); : 又假設 f(n) 值其實是可以在 compile time 計算出來的, 利用整數模板來計算, : 像這樣 f<0>::value, f<1>::value, ..., f<N-1>::value. 這樣一來, 數列的計 : 算可以在 compile time 完成, 但是產生了新的問題. 原本 f(n) 的計算, n 值 : 可以在 run time 才決定, 但利用整數模板之後, f<n>::value 的 n 值卻得在 : compile time 就決定了, 也就是說, 做以下的事情是不被允許的 : cin >> n; : cout << ( f<n>::value ); : 因為整數模板的整數值無法延到 run time 才決定, 最簡單的解決方法就是做苦工 : #define F(n) f<(n)>::value : int table[] = { F(0), F(1), ..., F(N-1) }; : 但是這樣做就覺得很醜, 每次要改變 N 值的範圍, 就得在編輯器複製貼上. C++語 : 言似乎缺乏在 source code level 的 for loop (或者說我可以稱此為 coding time : 的 for loop), 而在 compile time 的 for loop (整數模板), 卻又被過度限制, : 想在 compile time 填寫陣列表格也似乎做不到...? : 講到這裡, 講了好多, 好像我是來教導些什麼的? 其實我是來發問問題的 :p : 要怎樣才能漂亮的解決以上問題, 在 run time 之前就把表格填好, 並且可在 : run time 以動態決定的索引來存取這個表格? : 附註1: 只是單純的想討論這個問題, 想知道怎麼做, 至於該不該去這麼做, 或者 : 適不適當, 並非此處討論的重點. : 附註2: 我知道可以用程式寫工具來幫助自己寫程式, 利用工具來轉換或者產生程 : 式碼, 但是我只想侷限在語言本身的機制, 尋求看看是否有漂亮的解答? : 附註3: 突然想到了巨集 #define, 以及那兩個令人昏頭的運算子 # 與 ##, 似乎 : 是一種可能的解決方案? 只是想知道怎麼做啊... 好吧,以下: int table[N]; template<int i> int f(); template<int i> void function init_f() { table[i-1] = f<i-1>(); if(i) init_f<i-1>(); } void main() { init_f<N>(); cin >> n; cout << table[n]; } --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.222.173.29







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP