如何从向量中找到最小值?
int main()
{
int v[100] = {5,14,2,4,6};
int n = 5;
int mic = v[0];
for(int i=0;i<v[n];i++)
{
if(v[i]<mic)
mic=v[i];
}
cout<<mic;
}
但是不工作,我该怎么办?
如何从向量中找到最小值?
int main()
{
int v[100] = {5,14,2,4,6};
int n = 5;
int mic = v[0];
for(int i=0;i<v[n];i++)
{
if(v[i]<mic)
mic=v[i];
}
cout<<mic;
}
但是不工作,我该怎么办?
std::min_element(vec.begin(), vec.end())
- 对于 std::vector
std::min_element(v, v+n)
- 对于数组
std::min_element( std::begin(v), std::end(v) )
- 从@JamesKanze 的评论中添加了 C++11 版本
您始终可以使用 stl:
auto min_value = *std::min_element(v.begin(),v.end());
#include <iostream>
#include <vector>
#include <algorithm> // std::min_element
#include <iterator> // std::begin, std::end
int main() {
std::vector<int> v = {5,14,2,4,6};
auto result = std::min_element(std::begin(v), std::end(v));
if (std::end(v)!=result)
std::cout << *result << '\n';
}
您显示的程序有一些问题,主要罪魁祸首是for
条件:i<v[n]
. 初始化数组,将前 5 个元素设置为不同的值,其余元素设置为零。n
设置为您显式初始化的元素数,因此v[n]
第一个元素被隐式初始化为零。因此循环条件第一次为假,循环根本不运行;您的代码只是打印出第一个元素。
一些小问题:
避免使用原始数组;它们的行为奇怪且不一致(例如,隐式转换为指向数组第一个元素的指针,不能赋值,不能按值传递给函数/从函数返回)
避免幻数。int v[100]
如果您希望您的数组从某个地方获取输入然后尝试处理 100 多个元素,那么这是一个 bug 的邀请。
避免using namespace std;
在实现文件中没什么大不了的,虽然 IMO 最好习惯于显式限定,但如果你在任何地方盲目使用它可能会导致问题,因为你会将它放在头文件中并开始引起不必要的名称冲突。
您的代码中有错误。这一行:
for(int i=0;i<v[n];i++)
应该
for(int i=0;i<n;i++)
因为您想搜索n
向量中的位置,而不是v[n]
位置(这没有任何意义)
template <class ForwardIterator>
ForwardIterator min_element ( ForwardIterator first, ForwardIterator last )
{
ForwardIterator lowest = first;
if (first == last) return last;
while (++first != last)
if (*first < *lowest)
lowest = first;
return lowest;
}
试试这个
std::min_element(v.begin(),v.end())
#include <iostream>
int main()
{
int v[100] = {5,14,2,4,6};
int n = 5;
int mic = v[0];
for(int i = 0; i != n; ++i)
{
if(v[i] < mic)
mic = v[i];
}
std:cout << mic << std::endl;;
}