如何从向量中找到最小值?
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;
}
Run Code Online (Sandbox Code Playgroud)
但是不起作用,我该怎么办?
zab*_*lus 69
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版本
小智 28
你总是可以使用stl:
auto min_value = *std::min_element(v.begin(),v.end());
Run Code Online (Sandbox Code Playgroud)
bam*_*s53 11
#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';
}
Run Code Online (Sandbox Code Playgroud)
你展示的程序有一些问题,主要的罪魁祸首是for:i<v[n].初始化数组,将前5个元素设置为各种值,其余元素设置为零.n设置为显式初始化的元素数,因此v[n]是隐式初始化为零的第一个元素.因此,第一次循环条件为false,循环根本不运行; 你的代码只是打印出第一个元素.
一些小问题:
避免原始数组; 它们行为异常且不一致(例如,无法分配对数组的第一个元素的指针的隐式转换,不能通过值传递给函数/从函数返回)
避免魔术数字.int v[100]如果你希望你的数组从某个地方获得输入然后尝试处理超过100个元素,则是对bug的邀请.
避免using namespace std;它在实现文件中没什么大不了的,虽然IMO最好习惯于显式限定,但是如果你盲目地在任何地方使用它会导致问题,因为你会把它放在头文件中并开始引起不必要的名称冲突.
ale*_*nis 10
您的代码中有错误.这一行:
for(int i=0;i<v[n];i++)
Run Code Online (Sandbox Code Playgroud)
应该
for(int i=0;i<n;i++)
Run Code Online (Sandbox Code Playgroud)
因为你想搜索n你的矢量中的v[n]地方,而不是地方(这并不意味着什么)