我试图弄清楚如何从序列中的前四个数字中找到最大的数字,然后在序列中的下四个数字中找到最大的数字,等等... p>我写了一个函数,该函数在这里找到数组中最大的元素:
double max_array(int n, double array[]){
double arr[n];
arr[0] = 0;
double max;
for(int i = 0; i < n; i++)
{
if(arr[0] < array[i])
arr[0] = array[i];
}
max = arr[0];
return max;
}
我相信我可以使用我在这里所做的工作来编写一个例程来做我所描述的后者,但我不确定该怎么做。也许我必须写一个全新的功能,但我不确定,任何建议都非常感谢。
这应该或多或少地做您想要的。有多个结果,一个用于输入阵列中的每个四边形:
#include <valarray>
#include <cassert>
std::valarray<double> maxQuads(std::valarray<double> input) {
assert(!(input.size() % 4)); // The input must contain a multiple of 4 values
std::valarray<double> output(input.size() / 4);
for(std::size_t sliceIndex = 0; sliceIndex + 4 < input.size(); sliceIndex += 4) {
std::slice slice(sliceIndex, 4, 1);
output[sliceIndex / 4] = std::valarray(input[slice]).max();
}
return output;
}
void test() {
double aTestArray[] = {1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5};
std::valarray results = maxQuads(std::valarray(aTestArray, 8));
std::cout << "Max of the first 4: " << results[0];
std::cout << "Max of the second 4: " << results[1];
}
好吧,您可以重复使用max_array
:
// Assume I have an array 'foo' with N elements.
// In your code, N should be an actual value, like 10, and NOT a variable.
double V[N/4];
int i = 0;
while (i+4 < N) {
// use the i-th element of foo as the 0-th
// element of 'array' in max_array.
double V[i/4] = max_array(4, &(foo[i]));
i += 4;
}
请注意,使用上述代码,如果n不是4个倍数,例如 N = 6
,则不会考虑最后一个元素。
例如,如果foo
等于{ 0.0, 1.0, 1.5, 2.1, 5.0, 10.3 }
,则V
只有一个元素。{ 2.1 }
。
如果您想使用已经拥有的功能,可以这样做创建另一个调用您已经拥有的功能的功能。
double* max_array_vec(int n, double array[]){
int max_mumber = n/4 + (n%4); // how many max number you will have
double max[max_number];
double temp[4];
arr[0] = 0;
for(int i = 0; i < max_number; i++)
{
std::copy(array+ (3 * i), array+ (3 * (i + 1)), temp);
max[i] = max_array(4,temp);
}
max = arr[0];
return max;
}
,但是您可以制作另一个完成整个过程的函数,并且可以容易得多。
编辑第二部分
double *max_array(int n, double *array){
double arr[n/4 + 1] = {-1000, } ;// since ur looking for the biggest number u should initialize tis array with numbers really small like -400 or something like that
int index = 0;
for(int i = 0; i < n; i++)
{
if(i%4 == 0 && i!= 0)
index++;
if(arr[index] < array[i])
arr[index] = array[i];
}
//printf("n");
//for(int i = 0; i < 4; i++)
//printf("%fn ", arr[i]);
return arr;
}
问题是在拳头时我没有忽略i = 0时,我不需要增加索引