如何从向量中找到最小值?

Cri*_*oPs 13 c++

如何从向量中找到最小值?

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版本

  • `std :: min_element(std :: begin(v),std :: end(v))`用于C++ 11中的数组.Pre-C++ 11,无论你在工具箱中命名相应的函数. (13认同)
  • @Cristi记录中,'min_element`来自上一个千禧年.那个旧学校够吗?;) (8认同)
  • 还可以使用 `std::array&lt;T, N&gt;` 而不是 `T[N]`。 (2认同)

小智 28

你总是可以使用stl:

auto min_value = *std::min_element(v.begin(),v.end());
Run Code Online (Sandbox Code Playgroud)

  • 感谢您展示如何从min_element中获取最小值。这是一个完整的答案! (2认同)

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]地方,而不是地方(这并不意味着什么)

  • 循环也应该从 1 开始。没有必要检查第一个值两次。 (3认同)