使用for循环为结构的成员赋值

时间:2018-03-01 16:52:06

标签: c++ for-loop struct

我有一个

形式的结构
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有很多经验,但是我正在努力学习......非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

我的建议:

更改

temporalthing.A=A;
temporalthing.B=B;

temporalthing.A = getA(i);
temporalthing.B = getB(i);

函数getA()getB()可以使用任何逻辑为给定的A返回Bi

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};
}