[Findmax()方法在数组的第一个元素最高时返回第二个最大值

问题描述 投票:1回答:3

仅当它位于第一个索引以外的某个索引处时,此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++ pointers max
3个回答
0
投票

首先,正如对您的问题的评论之一所说,这主要是C的处理方式。在C ++中,您应该使用std::vectorstd::min_elementstd::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";
}

假设minimummaximum像这样全局声明,这应该可以工作:

int * maximum;
int * minimum;

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;
}

0
投票

其他答案描述了如何在C ++中更干净地执行此操作。但要指出实际的错误:它在这一行中。

© www.soinside.com 2019 - 2024. All rights reserved.