[問題] tuple如何用for迴圈取值

看板C_and_CPP (C/C++)作者時間5年前 (2020/06/29 20:51), 5年前編輯推噓4(4012)
留言16則, 6人參與, 5年前最新討論串1/4 (看更多)
開發平台(Platform): (Ex: Win10, Linux, ...) Win10 + linux 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) VS2015 + GCC 7.X VS2015目前支援C++11、部分C++14 C++17 https://tinyurl.com/yckr4kkp 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 1. 想要同時能在win10 + VS2015跑 與 linux + GCC跑 但是linux環境不被允許安裝程式,希望靠C++的手段完成 2. 想要能自動產生不同參數的模擬結果 原本想參考之前有大大推薦的googleTest VS要安裝十分簡單 但是linux上因為是伺服器,不給安裝這些東西 (我還在煩惱FFTW如何不安裝下,直接從source code include的方式執行Orz) 3. 因為不能安裝googleTest,只能用蠢方法 先產生主程式,再產生另一個用來給參數的程式S 利用程式S直接透過給system + 給參數的方式呼叫主程式同時給參數 完成有 (1) 限定同時跑幾隻不同參數的主程式 (2) 完成有同時能根據程式完成時,自動call 下一隻主程式 ( 判斷完成條件是,主程式會再開始與結束時候寫檔, 程式S根據檔案內容得知程式是否完成 原本想用多執行緒來完成,不過看起來修改起來複雜度不低 這個方向感覺走遠了,就放棄了 ) 4. 原本已完成的程式做法是 在程式S 決定要給的參數有哪些 比如 int Var1[] = { 1, 2, 3 } int size1 = sizeof(Var1) / sizeof(Var1[0]); double Var2[] = { 4.0, 5.5 } int size2 = sizeof(Var2) / sizeof(Var2[0]); int total_num = size1 * size2; // ========= control ========== int idx1 = 0; int idx2 = 0; while(1) { ....... if (program_done) { idx1++; if (idx1 == size1) { idx1 = 0; idx2++; if (idx2 == size2) break; // done } execute_new_program } } 另外,由於可能會多Var3, Var4等等 故每次都要跟著新增Var3, size3, idx3, break條件修改 覺得while-loop的部分實在不夠聰明,每次Var數量改變都要做增減 其中Var3以及要丟給主程式的參數部分一定要修改外, 想用用看新學到的語法,看能不能讓code盡量少被動 (尤其是下面while迴圈) 5. 目前改進的部分 將Var1, Var2改成vector 利用auto塞到tuple auto tuple_vector = make_tuple(Var1, Var2); int tuple_vector_size = tuple_size<decltype(tuple_vector)> ::value; 所目前為止,可以知道有幾個Var,應該是可以讓他自動知道要根據哪個idx判斷break 再來是個別的vector有多長,來得到我總共要跑幾次主程式 原本想使用 vector<int> vector_Var_size; for (int i = 0; i < tuple_vector_size; i++) { int size = get<i>(tuple_vector).size(); vector_Var_size.push(size); } 但是get<N>,N必須常數 6. 找到的相關可能解法 https://tinyurl.com/y9trwj75 好像可以用boost:Fusion,但是卡在如何在不安裝的情況下使用 內容有點多 這次想要盡量將問題說明清楚 希望改進前幾次發文的缺點 -- 標題 [笑話] 唐三藏的願望 唐三藏:八戒,你跑兩步給為師看看。 八 戒:師父,你為啥突然想看徒兒跑步? 唐三藏:哎啊!慚愧,為師自幼在寺中長大,既沒吃過豬肉,也沒看過豬跑步。

01/16 21:40,
我想你也沒被豬噓過
01/16 21:40
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.204.170 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1593435068.A.710.html ※ 編輯: ofd168 (60.250.204.170 臺灣), 06/29/2020 20:54:11

06/29 21:41, 5年前 , 1F
我覺得寫腳本會比叫輕鬆一點(′・ω・`)
06/29 21:41, 1F

06/29 21:41, 5年前 , 2F
06/29 21:41, 2F

06/29 21:44, 5年前 , 3F
我也在想說你寫python會不會比較簡單 XD
06/29 21:44, 3F

06/29 21:46, 5年前 , 4F
fftw的話,如果你的伺服器有gnu build system 或cmake,
06/29 21:46, 4F

06/29 21:46, 5年前 , 5F
應該還可以安裝在自己的資料夾
06/29 21:46, 5F

06/29 22:24, 5年前 , 6F
python itertools.product
06/29 22:24, 6F

06/29 22:25, 5年前 , 7F
自己實作的話用個DFS也可以
06/29 22:25, 7F

06/29 22:48, 5年前 , 8F

06/30 07:31, 5年前 , 9F
GoogleTest 不是也要人從 source code 編嗎?用 FetchC
06/30 07:31, 9F

06/30 07:31, 5年前 , 10F
ontent 全部加一加也就 3x行 https://bit.ly/38bVIyh
06/30 07:31, 10F

07/04 23:49, 5年前 , 11F
如果純粹是不能裝在系統的話 你每個都從source code開始
07/04 23:49, 11F

07/04 23:50, 5年前 , 12F
在configure時加上prefix=$HOME/path/to/lib 後安裝
07/04 23:50, 12F

07/04 23:51, 5年前 , 13F
最後在.profile或.bashrc裡在PATH加上你安裝的路徑就好了
07/04 23:51, 13F

07/05 08:21, 5年前 , 14F
Google Test不是下載source code 編譯就好??
07/05 08:21, 14F

07/05 08:34, 5年前 , 15F
從 source code 編譯不見得只有路徑設定的問題,問問看
07/05 08:34, 15F

07/05 08:34, 5年前 , 16F
管 server 人能不能幫忙裝應該也是個辦法
07/05 08:34, 16F
文章代碼(AID): #1U-UEySG (C_and_CPP)
文章代碼(AID): #1U-UEySG (C_and_CPP)