[问题] 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