如何在C++中找到数组中的最小元素?
以下是我如何尝试的: int main { //示例数组 int x[]{5,3,5,7,1,6,12}; int size=sizeofx/sizeofx[0]; int min=0; 整数指数; int i; 对于i=1;i如何在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
#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@真的!我将康斯特排除在外,以免分散对问题精神的注意力