C ++,一种检查3个数组的简单方法

时间:2012-12-03 16:07:56

标签: c++ arrays if-statement max

我有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];
        }
    }

但有时会有更多,所以写这样的话很头疼。那会有更好,更快的解决方案吗?

5 个答案:

答案 0 :(得分: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]);
}

答案 1 :(得分: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)。

答案 2 :(得分: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];
        }
    }
}

答案 3 :(得分: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;
}

答案 4 :(得分:-3)

您可以使用int类型数组来处理它。