2

私は3つの配列を持っています、

int fJump[13]、sJump[13]、tJump[13];

それぞれにジャンプが記録されています。max最大値を取得するために、そのうちの 1 つが より大きいかどうかを確認する必要があります。

だから私はこのようにすることができます:

for(int i=0;i<n;i++){
        if(max<fJump[i]){
            max = fJump[i];
        }
        if(max<sJump[i]){
            max = sJump[i];
        }
        if(max<tJump[i]){
            max = tJump[i];
        }
    }

しかし、時にはもっとたくさんあるので、このように書くのは頭痛の種です. それを行うためのより適切で迅速な解決策はありますか?

4

5 に答える 5

11

max_element独自のループを記述する代わりに、標準ライブラリの関数を使用できます。

int max = *std::max_element(fJump, fJump+13);
max = std::max(max, *std::max_element(sJump, sJump+13));
max = std::max(max, *std::max_element(tJump, tJump+13));

maxループ内で関数を使用することもできます。

for(int i=0;i<n;i++){
    max = std::max(max, fJump[i]);
    max = std::max(max, sJump[i]);
    max = std::max(max, tJump[i]);
}
于 2012-12-03T16:12:02.790 に答える
4
int * arrs[]={fJump, sJump, tJump};
int max=arrs[0][0];
for(int j=0; j<sizeof(arrs)/sizeof(*arrs); j++)
{
    for(int i=0; i<n; i++)
    {
        if(max<arrs[j][i])
            max=arrs[j][i];
    }
}

intまた、必要な数のポインターを入れることができますarrs(すべてが同じサイズの配列から来ている限り、つまりn)。

于 2012-12-03T16:12:34.107 に答える
2
int fJump[13], sJump[13], tJump[13];
int * pA[] = { fJump, sJump, tJump };

int l = sizeof(pA)/sizeof(pA[0]);

for(int i = 0; i < 13; ++i)
{
    for (int j = 0; j < l; ++j)
    {
        if(max < pA[j][i])
        {
            max = pA[j][i];
        }
    }
}
于 2012-12-03T16:13:50.800 に答える
0

max_elementを使用できます:

#include <algorithm>
#include <iostream>

int main()
{
  int a1[] = { 7,3,1,29,5 };
  int a2[] = { 11,12,18,5,4,3 };
  int a3[] = { 10,10,11,10 };

  std::vector< int > allMax{
    *std::max_element( a1, a1+5 ),
    *std::max_element( a2, a2+6 ),
    *std::max_element( a3, a3+4 ),
    };

  auto maxOfAll = *std::max_element( allMax.begin(), allMax.end() );

  std::cout << maxOfAll << std::endl;
}
于 2012-12-03T16:17:07.607 に答える
-3

int型の配列の配列で扱えます。

于 2012-12-03T16:14:10.350 に答える