假设我目前有以下代码:
double P[2][2][10];
std::vector<double> b, r, n;
//
// Assume that 10 doubles are pushed to each vector and
// that P has all its allocated values set.
//
for(int t=0; t<10; ++t) {
P[0][0][t] = b[t]*r[t]+n[t];
P[0][1][t] = b[t]*2.0*r[t]+(1.0-n[t]);
P[1][0][t] = b[t]*b[t]+r[t]*n[t];
P[1][1][t] = r[t]+n[t];
}
这是一个简单的例子来说明我的问题。在实际情况下,P
通常会这样P[9][9][100]
,方程会更混乱一些。我的问题是,基本上,我怎样才能使用宏来使这些方程更具可读性?
特别是,这里有一个非工作代码片段来说明我希望这个问题的解决方案看起来如何:
#define P(i,j) P[i][j][t]
#define b b[t]
#define r r[t]
#define n n[t]
for(int t=0; t<10; ++t) {
P(0,0) = b*r+n;
P(0,1) = b*2.0*r+(1.0-n);
P(1,0) = b*b+r*n;
P(1,1) = r+n;
}
此代码片段至少存在一个问题。例如,它会根据宏定义扩展For循环语句中的“r”和“n”。但你明白了。
这里的目标是开发一种输入方程式的方法,该方法可以更容易地阅读和检查错误。我对非宏解决方案持开放态度,尽管在我看来宏在这里可能会有所帮助。
关于我在上面发布的非工作代码片段来说明我想象的解决方案可能看起来如何......是否可以以宏替换仅发生在 For 循环体内的方式使用宏?或者至少直到For -loop 语句之后?