我有一个
形式的结构struct Thing {
std::vector<bool> A;
std::vector<int> B;
};
在main中,struct在for循环中创建,并用作函数的输入
for(int i=0;i<50;i++) {
Thing temporalthing;
temporalthing.A=A;
temporalthing.B=B;
temporalresult=fun1(temporalthing,data)
}
A和B被硬编码成一系列像这样存储的向量
std::vector<bool> A1{ 1,0,1};
std::vector<int> B1{ 2,1,3};
std::vector<bool> A2{ 0,1,1};
std::vector<int> B2{ 4,2,3}; ....
我希望for循环的每次迭代都取A和B的对应值(循环1取A1和B1,循环2取A2和B2,ETC),如果这是MATLAB,这很容易使用反射但是我理解C ++没有反射,我的另一个选择是使用50个不同值的Switch Case结构,这肯定会起作用,但我不确定这是否是最佳的方法。还有更好的方法吗?
我是C ++的新手,他对MATLAB有很多经验,但是我正在努力学习......非常感谢任何帮助
答案 0 :(得分:0)
我的建议:
更改
temporalthing.A=A;
temporalthing.B=B;
到
temporalthing.A = getA(i);
temporalthing.B = getB(i);
函数getA()
和getB()
可以使用任何逻辑为给定的A
返回B
和i
。
getA()
的一个简单实现是将各种A
存储在向量中。
std::vector<int>& getA(size_t i)
{
static std::vector<std::vector<int>> aList;
if ( aList.empty() )
{
// Fill up the list
aList[0] = {1, 0, 1};
aList[1] = {0, 1, 1};
// etc.
}
return aList[i];
}
对getB()
执行相同的操作。
如果getA()
可以使用i
来计算返回值,那么就不必存储A
。
std::vector<int> getA(size_t i)
{
int v1 = func1(i);
int v2 = func2(i);
int v3 = func3(i);
return {v1, v2, v3};
}