此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";
}
答案 0 :(得分:1)
其他答案描述了如何在C ++中更干净地执行此操作。但是要指出实际的错误:它在这一行。
*maximum = *(array+i);
您没有将maximum
指针重新分配给指向的最大元素,而是您从未更改指针,而是更改了{{1 }}指向(即maximum
)。您的意思是:
array[0]
您的 maximum = array + i;
函数中也存在相同的问题。
答案 1 :(得分:0)
首先,正如对您的问题的评论之一所说,这主要是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;
答案 2 :(得分:0)
有用于查找最大值和最小值的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;
}