使用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()
可以使用任何逻辑来返回给定的A
的B
和i
。
getA()
的一个简单实现是将各种A
s存储在一个向量中。
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
s。
std::vector<int> getA(size_t i)
{
int v1 = func1(i);
int v2 = func2(i);
int v3 = func3(i);
return {v1, v2, v3};
}
以上是关于使用for循环为结构的成员赋值的主要内容,如果未能解决你的问题,请参考以下文章