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