美文网首页
C++ STL min_element 使用说明

C++ STL min_element 使用说明

作者: book_02 | 来源:发表于2019-10-20 20:07 被阅读0次

    说明

    std::min_element 用于寻找范围 [first, last) 中的最小元素。

    前2个参数指定容器的范围,第3个参数是比较函数,为可选参数。
    返回值为指向范围 [first, last) 中最小元素的迭代器。
    若范围中有多个元素等价于最小元素,则返回指向首个这种元素的迭代器。若范围为空则返回 last 。

    关于比较函数, 默认是用 operator< 比较元素, 也可以自定义比较函数。
    所以std::min_element两种函数签名如下:

    template< class ForwardIt > 
    constexpr ForwardIt min_element( ForwardIt first, ForwardIt last );
    
    template< class ForwardIt, class Compare >
    constexpr ForwardIt min_element( ForwardIt first, ForwardIt last, Compare comp );
    

    std::max_elementstd::min_element类似,只是用于寻找最大的元素。

    头文件

    #include <algorithm>

    例子:求数组里最下的元素

    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    int main(int argc, char **argv) 
    {  
        std::vector<int> v{3, 1, 4, 1, 5, 9};
        
        std::vector<int>::iterator minElement = std::min_element(v.begin(), v.end());
        
        std::cout << "min element: " << *(minElement) << std::endl;
        std::cout << "min element at:" << std::distance(v.begin(), minElement) << std::endl;
        return 0;
    }
    

    结果如下:

    min element: 1
    min element at:1
    

    例子:自定义比较函数

    比如如下自定义比较函数,把求最小指编程求最大值

    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    int main(int argc, char **argv) 
    {  
        std::vector<int> v{3, 1, 4, 1, 5, 9};
        
        auto comp = [](int i, int j){ return i>j;}; //  i<j : min;  i>j : max   
        
        std::vector<int>::iterator maxElement = std::min_element(v.begin(), v.end(), comp);
        
        std::cout << "max element: " << *(maxElement) << std::endl;
        std::cout << "max element at:" << std::distance(v.begin(), maxElement) << std::endl;
        return 0;
    }
    

    结果如下:

    max element: 9
    max element at:5
    

    std::min_element 与 std::min 的区别

    std::min一般用于求 a 与 b 的较小者 或者求 initializer_list ilist 中值的最小者。
    std::min_element是求一个范围内的最小者的迭代器。范围可以是全部容器,也可以是容器的一个子区间。
    所以它们的适用范围和返回值不一样。

    参考

    https://zh.cppreference.com/w/cpp/algorithm/min_element
    http://www.cplusplus.com/reference/algorithm/min_element/
    https://zh.cppreference.com/w/cpp/algorithm/min

    相关文章

      网友评论

          本文标题:C++ STL min_element 使用说明

          本文链接:https://www.haomeiwen.com/subject/uvvamctx.html