我有一个8元阵列,必须有条件地定义。即,对于每个条件,数组元素的值将是不同的。
但是,对于每个条件,我宁愿不逐个定义元素。有没有办法我可以像这样一起定义数组的所有元素:
double c[8];
if ( a == p ){
c[]={values} ;
} else if ( a == q) {
c[]={values} ;
} else if (.. ){
......
}
而不是
double c[8];
if ( a == p ){
c[0]= .. ;
c[1]= .. ;
...
c[7] = ..;
} else if ( a == q) {
c[0]= .. ;
c[1]= .. ;
...
c[7] = ..;
} else if ( ... ) {
....
}
PS:条件有7个。
答案 0 :(得分:2)
假设条件的每个分支中的值没有改变:
有一些值数组值[NumConditions] [8]并使c成为指针。 然后:
switch(a) {
case First: c = values[0]; break;
case ...
}
答案 1 :(得分:1)
如果在编译时定义values
,则可以使用std::copy
作为示例。
std::copy(std::begin(values), std::end(values), std::begin(c));
答案 2 :(得分:1)
准备7个数组(或只是一个二维数据),它将在编译时初始化。然后,声明一个指针c
。然后,使用switch
选择所需的数组(即c = valuesList[2]
)。如果您需要在该数组上书写,请将其内容复制到switch
。
答案 3 :(得分:0)
更清洁的方法。使用Switch案例以避免不必要的比较
switch( a)
{
case p:
c[]={value1,valu2,...} ;
}
这只是一个演示如何使用:
int main() {
int choice = 1;
switch( choice )
{
case 1: double c[8] = {0.123,32.33,33.02,66.44,0.11,45.08,44.9,0.0412};
break;
}
return 0;
}
答案 4 :(得分:0)
如果给定条件的所有初始值设定项都相同,那么可以使用类std :: array而不是数组。例如
std::array<double, 8> c;
if ( a == p ){
c.fill( 0 );
} else if ( a == q) {
c.fill( 1 ) ;
} else if (.. ){
......
}
答案 5 :(得分:0)
恕我直言创建八个函数,你可以给出有意义的名字,告诉下一个程序员(或你自己一年)不同的八个配置意味着什么。
我承认它有点冗长但更重要的是它使代码更清晰
if ( a == p )
{
setConfigValuesForProducingPannkakes(c);
}
else if ( a == q )
{
setConfigValuesForProducingWaffles(c);
}
...
答案 6 :(得分:0)
std::array<double, 8> c;
if (a == p) {
c = {values};
} else if (a == q) {
c = {values};
} else if (...) {
...
}