0

* m行列のすべての行で最小値を見つけて、これらの値を新しい配列に配置するにはどうすればよいですか?私はこれまでこのコードを持っていますが、正しく機能していません:

void min(const int t[max_city][max_bird], int allmin[], int n, int m)
{
    int min=t[0][0];
    for(int i=0; i<n; ++i)
    {
        for(int j=0; j<m; ++j)
        {
            if(t[i][j]<min)
            {
                min=t[i][j];
            }
        }
        allmin[i]=min;
        cout << i+1 << ". min: " << allmin[i] << endl;
    }
}
4

1 に答える 1

5

min最初のループ内で宣言し、そこで初期化します。

for(int i=0; i<n; ++i)
{
   int min= INT_MAX; //do this here so that it gets initialized each time!

   for(int j=0; j<m; ++j)
   {
      //your code
   }
   //etc
}

を使用するINT_MAXには、を含めます<climits>


を使用するstd::min_elementと、関数を次のように書き直すことができます。

void min(const int t[max_city][max_bird], int allmin[], int n, int m)
{
    for(int i=0; i<n; ++i)
    {
        allmin[i] = *std::min_element(t[i], t[i] + m);
    }
}

とても短くなりました!

この関数std::min_elementは最小要素へのポインターを返すため、返されたポインターを逆参照して(最小要素の)値を取得します。

プログラムで使用するstd::min_elementには、次のヘッダーを含める必要があります。

#include <algorithm>

お役に立てば幸いです。

于 2013-03-10T19:04:06.297 に答える