仅当它位于第一个索引以外的某个索引处时,此findMax函数才会从数组中返回最大值。我不明白为什么,因为我的findMin函数几乎具有相同的代码,效果很好。
void findMax(int array[5])
{
maximum = array;
for (i = 0; i < 5; i++)
{
if (*(array+i) > *maximum)
*maximum = *(array+i);
}
cout<<"Maximum element in the array is "<< *maximum << "\n" ;
}
这是我的findMin乐趣,效果很好。
void findMin(int array[5])
{
minimum = array;
for (i = 0; i < 5; i++)
{
if (*(array+i) < *minimum)
*minimum = *(array+i);
}
cout<<"Minimum element in the array is "<< *minimum <<"\n";
}
首先,正如对您的问题的评论之一所说,这主要是C的处理方式。在C ++中,您应该使用std::vector
,std::min_element
和std::max_element
。使用它们比您自己手动完成所有操作更为简单和安全。
但是,如果您真的想自己做,请尝试以下代码,它应该可以工作:
void findMax(int array[])
{
maximum = array;
for (int i = 1; i < 5; i++)
{
if (*(array + i) > *maximum)
maximum = (array + i);
}
cout << "Maximum element in the array is " << *maximum << "\n";
}
void findMin(int array[])
{
minimum = array;
for (int i = 1; i < 5; i++)
{
if (*(array + i) < *minimum)
minimum = (array + i);
}
cout << "Minimum element in the array is " << *minimum << "\n";
}
假设minimum
和maximum
像这样全局声明,这应该可以工作:
int * maximum;
int * minimum;
有minmax_element工具可用于查找最大值和最小值,这是解决问题的最佳方案-请参见StdMinMax函数的定义。但是,如果您想自己实现逻辑,我提供了一个函数示例,请参见MinMax函数的定义。
#include <iostream>
#include <algorithm>
void StdMinMax(int* arr, const unsigned int size)
{
std::pair<int*, int*> bounds = std::minmax_element(arr, arr + size); // or use auto bounds = ... ore auto [max, min] = ...
std::cout << "min : " << *bounds.first << " max : " << *bounds.second << std::endl;
}
void MinMax(int* arr, const unsigned int size)
{
std::cout << "Find max : " << std::endl;
auto currentMax = *arr;
for (int i = 1 ; i < size; ++i)
{
if (arr[i] > currentMax)
{
currentMax = arr[i];
}
}
std::cout << "Max : " << currentMax << std::endl;
std::cout << "Find min : " << std::endl;
auto currentMin = *arr;
for (int i = 1 ; i < size; ++i)
{
if (arr[i] < currentMax)
{
currentMin = arr[i];
}
}
std::cout << "Min : " << currentMin << std::endl;
}
int main()
{
const unsigned int size{5};
int array[size]{1, 3, 4, -11, 77};
StdMinMax(array, size);
MinMax(array, size);
return 0;
}
其他答案描述了如何在C ++中更干净地执行此操作。但要指出实际的错误:它在这一行中。