C ++函数用于查找3个数组的最大元素

时间:2015-07-21 02:03:08

标签: c++ arrays function max

我目前正在学习数组及其工作原理。我给出了以下函数,用于查找三个不同数组A,B和C中的最大元素:

void findMax(int A[], int B[], int C[])
{
    int maxA = A[0], maxB = B[0], maxC = C[0];
    for (int i = 1; i < MAX_LEN; i++)
    {
        if(maxA < A[i]) maxA = A[i];
        if(maxB < B[i]) maxB = B[i];
        if(maxC < C[i]) maxC = C[i];
    }
}

我的目标是弄清楚如何在不添加额外参数的情况下返回所有三个值(maxA,maxB,maxC)。我被允许更改返回类型,我可以在函数外部编写代码。

我的第一个想法是将void更改为int并创建一个具有这三个最大值的新数组。但是,我认为我需要返回数组的指针,但我们还没有学到这一点。

2 个答案:

答案 0 :(得分:2)

有几种方法可以解决这个问题。

传统方法(阵列)

最简单的方法是让函数返回int[]。这样可以轻松地以简洁的格式返回所有值。但是,int[]类型不能保证其大小为3或包含您声明它包含的内容,因此这不是一种非常类型友好的方法。

OO方法(结构)

大多数JAVA爱好者会告诉你制作一个包含这个想法的结构或类,比如这个。

struct MaxVals {
    int maxA;
    int maxB;
    int maxC;
    // Possibly a constructor here
};

这仍然是一种非常节省内存的解决方案,并且比阵列方法更清晰。它还具有更加类型安全的好处;你现在不能制作一个MaxVals有四个或两个int;它在编译时保证有3.然而,这是笨重的。它要求你定义一个完全在你的函数之外的新类型,它只会在这种情况下使用。

现代方法(元组)

这是C ++的一个新功能,改编自Python和Haskell,所以它只适用于C ++ 11,它对编译器的支持有限。元组是tuple标头中的新数据结构,它可以保证在编译时指定的任何类型的异构,固定大小的数据结构。您可以将返回类型设置为std::tuple<int, int, int>,并使用std::make_tuple(maxA, maxB, maxC)初始化结构。

这种方法与结构方法具有相同的内存优势和保证,但没有声明一次性类型的所有开销和样板。如果您的编译器支持,这将是解决此类问题的理想方法。

答案 1 :(得分:0)

你可以做两件事:

第一个是在函数(全局)旁边声明maxA, maxB, maxC。然后在findMax函数和main函数中访问它们。

int maxA, maxB, maxC;  
void findMax(int A[], int B[], int C[])
{
    maxA = A[0], maxB = B[0], maxC = C[0];
    for (int i = 1; i < MAX_LEN; i++)
    {
        if(maxA < A[i]) maxA = A[i];
        if(maxB < B[i]) maxB = B[i];
        if(maxC < C[i]) maxC = C[i];
    }
}

第二种是使用结构。

    struct node
    {
        int maxA,maxB,maxC;
    };

    struct node findMax(int A[], int B[], int C[])
    {
        struct node Max_node;
        Max_node.maxA = A[0], Max_node.maxB = B[0], Max_node.maxC = C[0];
        for (int i = 1; i < MAX_LEN; i++)
        {
            if(Max_node.maxA < A[i]) Max_node.maxA = A[i];
            if(Max_node.maxB < B[i]) Max_node.maxB = B[i];
            if(Max_node.maxC < C[i]) Max_node.maxC = C[i];
        }
        return Max_node;
    }
P.S:你也可以使用指针,但正如你所说,你不熟悉它们,我还有其他方法。