我目前正在学习数组及其工作方式。我获得了以下函数,该函数用于在三个不同的数组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并创建一个具有这三个最大值的新数组。但是,我认为我需要返回数组的指针,但我们还没有学到。
有几种方法可以解决此问题。
最简单的方法是使函数返回int[]
。这样可以以非常简洁的格式轻松返回所有值。但是,该int[]
类型不能保证其大小为3或包含您所声称的内容,因此这不是一种非常友好的类型。
大多数JAVA爱好者会告诉您制作一个封装该想法的结构或类,例如这样。
struct MaxVals {
int maxA;
int maxB;
int maxC;
// Possibly a constructor here
};
这仍然是一个非常节省内存的解决方案,比阵列方法干净得多。它还具有更加类型安全的好处;您现在不能MaxVals
用4或2来做a int
;它保证在编译时具有3。但是,这很庞大。它要求您定义一个完全不在函数范围内的新类型,该新类型只能在这种情况下使用。
这是C ++的一项新功能,改编自Python和Haskell,因此仅在C ++ 11中可用,而C ++ 11对跨编译器的支持有限。元组是tuple
标头中的新数据结构,它可以保证在编译时指定的任何类型的异构,固定大小的数据结构。您将返回类型设置为,std::tuple<int, int, int>
并使用初始化结构std::make_tuple(maxA, maxB, maxC)
。
这种方法具有与struct方法相同的内存优势,并保证了结构,但没有声明一次性类型的所有开销和样板。如果您的编译器支持的话,这将是解决此类问题的理想方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句