数组初始化 - 有条件地

时间:2013-12-05 11:22:40

标签: c++ c arrays if-statement initialization

我有一个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个。

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 (...) {
    ...
}