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

作者: ofd168 (大色狼來襲)   2020-06-29 20:50:57
開發平台(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,但是卡在如何在不安裝的情況下使用
內容有點多
這次想要盡量將問題說明清楚
希望改進前幾次發文的缺點
作者: changhua5566   2019-01-16 21:40:00
我想你也沒被豬噓過
作者: firejox (Tangent)   2020-06-29 21:41:00
我覺得寫腳本會比叫輕鬆一點(′・ω・`)較
作者: james732 (好人超)   2020-06-29 21:44:00
我也在想說你寫python會不會比較簡單 XD
作者: firejox (Tangent)   2020-06-29 21:46:00
fftw的話,如果你的伺服器有gnu build system 或cmake,應該還可以安裝在自己的資料夾
作者: flarehunter (Range)   2020-06-29 22:24:00
python itertools.product自己實作的話用個DFS也可以https://ideone.com/1lL7ni
作者: Lipraxde (Lipraxde)   2020-06-30 07:31:00
GoogleTest 不是也要人從 source code 編嗎?用 FetchContent 全部加一加也就 3x行 https://bit.ly/38bVIyh
作者: Richun (解放左手的OO之力)   2020-07-04 23:49:00
如果純粹是不能裝在系統的話 你每個都從source code開始在configure時加上prefix=$HOME/path/to/lib 後安裝最後在.profile或.bashrc裡在PATH加上你安裝的路徑就好了
作者: KevinR (Kevin)   2020-07-05 08:21:00
Google Test不是下載source code 編譯就好??
作者: Lipraxde (Lipraxde)   2020-07-05 08:34:00
從 source code 編譯不見得只有路徑設定的問題,問問看管 server 人能不能幫忙裝應該也是個辦法

Links booklink

Contact Us: admin [ a t ] ucptt.com