2

我有3个数组,

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

他们每个人都记录了跳跃。我需要检查其中一个是否大于max,以获得最大的价值。

所以我可以这样:

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 回答