如何在C++中找到数组中的最小元素?

如何在C++中找到数组中的最小元素?,c++,arrays,indexing,element,minimum,C++,Arrays,Indexing,Element,Minimum,以下是我如何尝试的: int main { //示例数组 int x[]{5,3,5,7,1,6,12}; int size=sizeofx/sizeofx[0]; int min=0; 整数指数; int i; 对于i=1;i

以下是我如何尝试的:

int main { //示例数组 int x[]{5,3,5,7,1,6,12}; int size=sizeofx/sizeofx[0]; int min=0; 整数指数; int i; 对于i=1;icout如果仍要使用函数而不是std::min\u元素:

include//for INT_MAX define int main { //示例数组 int x[]{5,3,5,7,1,6,12}; int size=sizeofx/sizeofx[0]; int min=int_MAX;//您必须将值设置为可能的最高值INT32 int指数=-1; 对于int i=0;icout如果仍要使用函数而不是std::min\u元素:

include//for INT_MAX define int main { //示例数组 int x[]{5,3,5,7,1,6,12}; int size=sizeofx/sizeofx[0]; int min=int_MAX;//您必须将值设置为可能的最高值INT32 int指数=-1; 对于int i=0;icout您没有初始化索引变量,您正在将min变量初始化为0,而不是第一个元素的值,因为您从第二个元素开始循环,并且您正在忽略循环比较中的当前min

将您的代码改为更像这样:

包括 int main { //示例数组 int x[]{5,3,5,7,1,6,12}; int size=sizeofx/sizeofx[0]; int min=x[0]; int指数=0; 对于int i=1;istd::cout您没有初始化索引变量,您正在将min变量初始化为0,而不是第一个元素的值,因为您从第二个元素开始循环,并且您正在忽略循环比较中的当前min

将您的代码改为更像这样:

包括 int main { //示例数组 int x[]{5,3,5,7,1,6,12}; int size=sizeofx/sizeofx[0]; int min=x[0]; int指数=0; 对于int i=1;istd::cout您的代码在数组中找不到最小值。它只找到小于2的最后一个元素

您需要将元素与min进行比较,而不是与某个静态值进行比较。对于min,一个好的初始猜测是std::numeric_limits::max或第一个元素的值

在i=1时启动循环,即跳过第一个元素,如果使用x[0]作为min的初始值,则可以。此外,您忘记初始化索引,这是错误的,因为如果循环未找到小于2的元素,打印索引将调用未定义的行为

以下假设阵列不是空的:

#include <iostream>
#include <limits>

int main () {
    // example array
    int x [] { 5, 3, 5, 7, 1, 6, 12 };

    int size = sizeof(x) / sizeof(x[0]);
    //int min = std::numeric_limits<int>::max();
    int min = x[0];
    int index = 0;

    for (size_t i=1; i < size; i++) {
        if (x [i]< min) {
            index = i ;
            min = x[i];
        }
    }
    std::cout << index << " " << min << "\n";
    return 0;
}

但是,惯用的方法是使用std::min_元素,它将迭代器返回到最小元素。

您的代码在数组中找不到最小值。它只找到最后一个小于2的元素

您需要将元素与min进行比较,而不是与某个静态值进行比较。对于min,一个好的初始猜测是std::numeric_limits::max或第一个元素的值

在i=1时启动循环,即跳过第一个元素,如果使用x[0]作为min的初始值,则可以。此外,您忘记初始化索引,这是错误的,因为如果循环未找到小于2的元素,打印索引将调用未定义的行为

以下假设阵列不是空的:

#include <iostream>
#include <limits>

int main () {
    // example array
    int x [] { 5, 3, 5, 7, 1, 6, 12 };

    int size = sizeof(x) / sizeof(x[0]);
    //int min = std::numeric_limits<int>::max();
    int min = x[0];
    int index = 0;

    for (size_t i=1; i < size; i++) {
        if (x [i]< min) {
            index = i ;
            min = x[i];
        }
    }
    std::cout << index << " " << min << "\n";
    return 0;
}
然而,惯用的方法是使用std::min_元素,它将迭代器返回到最小元素

有没有更通用的方法来求最小值

既然你问了,是的。有一个更一般的方法

解决了这个问题

int main ()
{
    // example array
    int x [] { 5, 3, 5, 7, 1, 6, 12 };

    auto iterator = std::min_element( std::begin(x), std::end(x) );

    auto index = std::distance(std::begin(x), iterator);
    auto min = *iterator;
    cout << index << " " << min << endl;
}
有没有更通用的方法来求最小值

既然你问了,是的。有一个更一般的方法

解决了这个问题

int main ()
{
    // example array
    int x [] { 5, 3, 5, 7, 1, 6, 12 };

    auto iterator = std::min_element( std::begin(x), std::end(x) );

    auto index = std::distance(std::begin(x), iterator);
    auto min = *iterator;
    cout << index << " " << min << endl;
}

我想到了。我认为它找不到最小的元素。它找到了最后一个小于2的元素。如果没有,你将得到未定义的行为。如果你想自己实现它,std::numeric_limits::max是最小值的一个很好的初始猜测欢迎使用堆栈溢出!如果你想帮助改进工作代码,你应该uld发布此内容。如果您确实决定这样做,请删除此处的问题。不需要从INT_MAX开始。从第一个元素开始。突然想到。我认为它找不到最小的元素。它会找到最后一个小于2的元素。如果没有,您将得到未定义的行为。如果您想实现它,请自行选择f st
d::numeric_limits::max是最小值的一个很好的初始猜测欢迎使用堆栈溢出!如果您想要帮助改进工作代码,您应该将此发布在。如果您决定这样做,请删除此处的问题。不需要以INT_MAX开头。从第一个元素开始。我更喜欢这个元素,如果没有其他原因,就是用x[0]初始化min。对于一个给定的容器,没有理由去全局化。我更喜欢这个,如果没有其他原因的话,就是用x[0]初始化min。对于给定的容器,没有理由使用global.const auto index=std::distancestd::beginx,iterator@真的!我将省略const,以免分散对问题本质的注意力const auto index=std::distance std::beginx,iterator@真的!我将康斯特排除在外,以免分散对问题精神的注意力