x******9 发帖数: 203 | 1 根据判断标志位flag决定循环体的顺序先行后列还是先列后行. 代码段code相同.如何
避免code重复写两遍?
if (flag==1)
{for (i=0;i<10;i++)
for (j=0;j<5;j++)
{ code...
}
}
else if (flag==2)
{for (j=0;j<5;j++)
for (i=0;i<10;i++)
{ code...
}
} |
X****r 发帖数: 3557 | 2 最简单就是把中间的code写成单独的函数了。
以下方法不得已而用,一般不推荐:
for (k = 0; k < 50; k++) {
if (flag == 1) {
i = k / 5;
j = k % 5;
} else if (flag == 2) {
i = k % 10;
j = k / 10;
}
// code...
}
【在 x******9 的大作中提到】 : 根据判断标志位flag决定循环体的顺序先行后列还是先列后行. 代码段code相同.如何 : 避免code重复写两遍? : if (flag==1) : {for (i=0;i<10;i++) : for (j=0;j<5;j++) : { code... : : } : } : else if (flag==2)
|
N***m 发帖数: 4460 | 3 把code放在一个单独的函数行不行?
这样的话也就多写了两行。
【在 x******9 的大作中提到】 : 根据判断标志位flag决定循环体的顺序先行后列还是先列后行. 代码段code相同.如何 : 避免code重复写两遍? : if (flag==1) : {for (i=0;i<10;i++) : for (j=0;j<5;j++) : { code... : : } : } : else if (flag==2)
|
a****l 发帖数: 8211 | 4 use switch.
【在 x******9 的大作中提到】 : 根据判断标志位flag决定循环体的顺序先行后列还是先列后行. 代码段code相同.如何 : 避免code重复写两遍? : if (flag==1) : {for (i=0;i<10;i++) : for (j=0;j<5;j++) : { code... : : } : } : else if (flag==2)
|
G****A 发帖数: 4160 | 5 不知道这样算不算优化了代码(code中只出现一次for的双循环)?代价是多了两个int变
量。
int row, col;
if(flag==1)
{row = 10; col = 5;}
else
{row = 5; col = 10;}
for(int i=0; i
for(int j=0; j
....
}
}
【在 x******9 的大作中提到】 : 根据判断标志位flag决定循环体的顺序先行后列还是先列后行. 代码段code相同.如何 : 避免code重复写两遍? : if (flag==1) : {for (i=0;i<10;i++) : for (j=0;j<5;j++) : { code... : : } : } : else if (flag==2)
|
N***m 发帖数: 4460 | 6 in general, no.
since code may generate different results for different ordering
【在 G****A 的大作中提到】 : 不知道这样算不算优化了代码(code中只出现一次for的双循环)?代价是多了两个int变 : 量。 : int row, col; : if(flag==1) : {row = 10; col = 5;} : else : {row = 5; col = 10;} : for(int i=0; i : for(int j=0; j: ....
|
r****t 发帖数: 10904 | 7 写 row major iterator/ column major iterator, 然后后面的 logic 就公用了。
【在 x******9 的大作中提到】 : 根据判断标志位flag决定循环体的顺序先行后列还是先列后行. 代码段code相同.如何 : 避免code重复写两遍? : if (flag==1) : {for (i=0;i<10;i++) : for (j=0;j<5;j++) : { code... : : } : } : else if (flag==2)
|
t***o 发帖数: 4265 | 8 看你的意思就是想提高代码复用。那就用函数吧。
//code
foo(i,j){
code...
...
}
//col first
col_first(){
for (i=0;i<10;i++)
for (j=0;j<5;j++)
foo(i,j);
}
//row first
row_first(){
for (j=0;j<5;j++)
for (i=0;i<10;i++)
foo(i,j);
}
//main program
if(flag==1) col_first();
elseif(flag==2) row_first();
【在 x******9 的大作中提到】 : 根据判断标志位flag决定循环体的顺序先行后列还是先列后行. 代码段code相同.如何 : 避免code重复写两遍? : if (flag==1) : {for (i=0;i<10;i++) : for (j=0;j<5;j++) : { code... : : } : } : else if (flag==2)
|