在c ++中更改数组值

时间:2014-03-19 16:28:39

标签: c++ arrays pointers

我的cpp程序中有一个2维数组,它存储了八列和三行的双值。我有一个函数来确定每行的最小值。现在我想改变那个最小变量的值。我是通过指针传递数组及其对我的挑战。下面是获取最小值的getMaxMin()。任何帮助都将受到赞赏。

 double **getMaxMin(double **scores){
    for(int i=0;i<3;i++){
        double small=scores[i][0];
        for(int j=1;j<8;j++){
            if(small>scores[i][j]){
                small=scores[i][j];

            }
        }
        cout<<small<<endl;
    }
    return scores;
}

5 个答案:

答案 0 :(得分:1)

保存small时也保存索引:

// ...
if( small > scores[i][j] )
{
    small = scores[i][j];
    small_i = i;
    small_j = j;
}


// later
scores[small_i][small_j] = //...

我想对于这种情况,你只需要存储列索引,因为你是逐行进行的。这是一个更通用的版本。

答案 1 :(得分:1)

    int smalli,smallj;
....
      if(small>scores[i][j]){
                small=scores[i][j];
                smalli = i;
                smallj = j;
           }

    ...

    scores[smalli][smallj] = newval;

答案 2 :(得分:0)

这会回答你的问题吗?

 double **getMaxMin(double **scores){
    for(int i=0;i<3;i++){
        double small=scores[i][0];
        int best_j = 0; // NEW
        for(int j=1;j<8;j++){
            if(small>scores[i][j]){
                small=scores[i][j];
                best_j = j; // NEW
            }
        }
        cout<<small<<endl;
        scores[i][best_j] = 42.0f; // NEW
    }
    return scores;
}

答案 3 :(得分:0)

我可能会遗漏一些东西,但为什么要使用最小的地址并使用它来分配新值?

(注意:我可能会遗漏一些东西,但是我们已经厌倦了c ++的编码......哦,废话,今年几岁!

double **getMaxMin(double **scores)
{
    for(int i=0;i<3;i++){
        double* small = &scores[i][0];
        for(int j=1;j<8;j++){
            if(*small>scores[i][j]){
                small=&scores[i][j];

            }
        }
        cout<<*small<<endl;
    }
    *small = 100.0; // Set new value here
    return scores;
}

答案 4 :(得分:0)

有很多方法可以做到这一点,但一种简单的方法就是保存索引。

跟踪每行的最小值:

double **getMaxMin(double **scores){
    for(int i=0;i<3;i++){
        double small=scores[i][0];
        int small_j = 0;
        for(int j=1;j<8;j++){
            if(small>scores[i][j]){
                small=scores[i][j];
                small_j = j;
            }
        }
        cout<<small<<endl;
        // Now you can change the value of the smallest variable for that row
        //small[i][small_j] = yourvalue
    }
    return scores;
}

跟踪整个数组中的最小值:

double **getMaxMin(double **scores){
    for(int i=0;i<3;i++){
        double small=scores[i][0];
        int small_j = 0;
        int small_i = 0;
        for(int j=1;j<8;j++){
            if(small>scores[i][j]){
                small=scores[i][j];
                small_j = j;
                small_i = i;
            }
        }
        cout<<small<<endl;
    }

    // Now you can do something with the smallest value in the entire array
    // small[small_i][small_j] = yourvalue
    return scores;
}