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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用for循环为结构的成员赋值相关的知识,希望对你有一定的参考价值。

我有一个表格的结构

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有很多经验,但是我试着学习......非常感谢任何帮助

答案

我的建议:

更改

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

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

函数getA()getB()可以使用任何逻辑来返回给定的ABi

getA()的一个简单实现是将各种As存储在一个向量中。

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来计算返回值,那么,它不必存储As。

std::vector<int> getA(size_t i)
{
   int v1 = func1(i);
   int v2 = func2(i);
   int v3 = func3(i);
   return {v1, v2, v3};
}

以上是关于使用for循环为结构的成员赋值的主要内容,如果未能解决你的问题,请参考以下文章

for循环结构

C语言谁能帮我写个for循环给二维数组赋值

带有循环的结构成员值赋值

使用双指针为结构成员赋值

初识java-循环结构:6

Java历程-初学篇 Day07 循环结构2 for循环