for(int row = 0; row < GW.numRows(); row++)
{
for(int fld = 0;/*fld如果是1,4,8,12,14为条件ture*/; fld++)
{
if(strlen(GW.fieldValue(fld)) > 0)
{
cout <<GW.fieldValue(fld) << endl;
}
}
}
如果条件是1,4,8,12,14为条件确立,
我想到只能为逐个数字做if,是不是有更好的办法呢?
8 个解决方案
#1
写成一个函数就好了
#2
for(int fld = 0;/*fld如果是1,4,8,12,14为条件ture*/; fld++)
那么fld初始值为0,条件为假,循环直接结束,一次都不会执行。
我想你的的应该是fld分别取值1,4,8,12,14吧,如果是这样,在不支持0x的编译器上应该这样:
那么fld初始值为0,条件为假,循环直接结束,一次都不会执行。
我想你的的应该是fld分别取值1,4,8,12,14吧,如果是这样,在不支持0x的编译器上应该这样:
for( int j = 0; j < 5; ++j)
{
static const int values[] = {1,4,8,12,14}
int fld = values[j];
//……
}
#3
此外,如果你真想要一个“fld如果是1,4,8,12,14为条件ture”也很简单:
不这这种判断……不加注释的话会让人比较头痛,还不如干脆使用==和&&写一个组合表达式。更好的方法是用位操作实现一个整数集合对象,在这个条件判断中使用集合的include判断。
if ((( 1 << fld ) & 0x5112)!=0)
{
}
不这这种判断……不加注释的话会让人比较头痛,还不如干脆使用==和&&写一个组合表达式。更好的方法是用位操作实现一个整数集合对象,在这个条件判断中使用集合的include判断。
#4
++
这个通用好,可以任意安排,也就占用一个数组的空间。时间上,性能也比差
#5
嗯,如果支持c++11,可以这样
用法:
in({1,4,8,12,14}, fld);
可惜必须支持c++11的initializer_list
template<typename T>
inline in(const std::initializer_list<T>& il, const T& val)
{
return std::find(il.begin(), il.end(), val) != il.end();
}
用法:
in({1,4,8,12,14}, fld);
可惜必须支持c++11的initializer_list
#6
用查表的方式。
#7
for (A;B;C) D;
//等价于
{
A;
while (1) {
if (!(B)) break;
D;
C;
}
}
Release版默认速度优化,编译器会对switch语句作适当优化:
for(int row = 0; row < GW.numRows(); row++)
{
{
int fld=0,flag;
while (1) {
switch (fld) {
case 1:
case 4:
case 8:
case 12:
case 14:
flag=1;
break;
default:
flag=0;
}
if (!flag) break;
if(strlen(GW.fieldValue(fld)) > 0)
{
cout <<GW.fieldValue(fld) << endl;
}
fld++;
}
}
}
#8
可以用STL里面的泛型算法
#1
写成一个函数就好了
#2
for(int fld = 0;/*fld如果是1,4,8,12,14为条件ture*/; fld++)
那么fld初始值为0,条件为假,循环直接结束,一次都不会执行。
我想你的的应该是fld分别取值1,4,8,12,14吧,如果是这样,在不支持0x的编译器上应该这样:
那么fld初始值为0,条件为假,循环直接结束,一次都不会执行。
我想你的的应该是fld分别取值1,4,8,12,14吧,如果是这样,在不支持0x的编译器上应该这样:
for( int j = 0; j < 5; ++j)
{
static const int values[] = {1,4,8,12,14}
int fld = values[j];
//……
}
#3
此外,如果你真想要一个“fld如果是1,4,8,12,14为条件ture”也很简单:
不这这种判断……不加注释的话会让人比较头痛,还不如干脆使用==和&&写一个组合表达式。更好的方法是用位操作实现一个整数集合对象,在这个条件判断中使用集合的include判断。
if ((( 1 << fld ) & 0x5112)!=0)
{
}
不这这种判断……不加注释的话会让人比较头痛,还不如干脆使用==和&&写一个组合表达式。更好的方法是用位操作实现一个整数集合对象,在这个条件判断中使用集合的include判断。
#4
++
这个通用好,可以任意安排,也就占用一个数组的空间。时间上,性能也比差
#5
嗯,如果支持c++11,可以这样
用法:
in({1,4,8,12,14}, fld);
可惜必须支持c++11的initializer_list
template<typename T>
inline in(const std::initializer_list<T>& il, const T& val)
{
return std::find(il.begin(), il.end(), val) != il.end();
}
用法:
in({1,4,8,12,14}, fld);
可惜必须支持c++11的initializer_list
#6
用查表的方式。
#7
for (A;B;C) D;
//等价于
{
A;
while (1) {
if (!(B)) break;
D;
C;
}
}
Release版默认速度优化,编译器会对switch语句作适当优化:
for(int row = 0; row < GW.numRows(); row++)
{
{
int fld=0,flag;
while (1) {
switch (fld) {
case 1:
case 4:
case 8:
case 12:
case 14:
flag=1;
break;
default:
flag=0;
}
if (!flag) break;
if(strlen(GW.fieldValue(fld)) > 0)
{
cout <<GW.fieldValue(fld) << endl;
}
fld++;
}
}
}
#8
可以用STL里面的泛型算法