C++ 算法 元素最大值和最小值

一 写在前面
  • 本文介绍 C++ 标准库中的三个 用于获取元素最大值和最小值 的非更易型算法(nonmodifying algorithm): min_element、 max_element 和 min_max_element。同样均定义于头文件< algorithm >。
二 Demo
  • 代码:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
#include <string>

template <typename C>
void fill(C& container, int begin, int end) {
  for (auto i = begin; i <= end; i++) {
    container.emplace_back(i);
  }
}

template <typename C>
void print(const std::string& pre, C container) {
  std::cout << pre;
  std::copy(container.begin(), container.end(),
            std::ostream_iterator<int>(std::cout, " "));
  std::cout << std::endl;
}

int main() {
  {
    // min_element max_element min_max_element
    std::vector<int> vc;
    vc.emplace_back(1);
    fill(vc, 1, 9);
    vc.emplace_back(9);
    vc.emplace_back(9);
    print1("vc: ", vc);

    auto min = std::min_element(vc.begin(), vc.end());
    std::cout << "No." << std::distance(vc.begin(), min) 
              << " is the min element." << std::endl;
    auto max = std::max_element(vc.begin(), vc.end());
    std::cout << "No." << std::distance(vc.begin(), max)
              << " is the max element." << std::endl;
    auto min_max = std::minmax_element(vc.begin(), vc.end());
    std::cout << "min_max is No." << std::distance(vc.begin(), min_max.first) 
              << " and No." << std::distance(vc.begin(), min_max.second) << std::endl;
  }

  std::cin.get();
  return 0;
}
vc: 1 1 2 3 4 5 6 7 8 9 9 9
No.0 is the min element.
No.9 is the max element.
min_max is No.0 and No.11
  • 注意
    • min_element 返回[first, last) 中指向第一个最小值的迭代器
    • max_element 返回[first, last) 中指向第一个最大值的迭代器
    • minmax_element 返回 std::pair<第一个最小值的迭代器, 最后一个最大值的迭代器>
三 min_element
template< class ForwardIt >
ForwardIt min_element( ForwardIt first, ForwardIt last );(1)(until C++17)
template< class ForwardIt >
constexpr ForwardIt min_element( ForwardIt first, ForwardIt last );(1)(since C++17)
template< class ExecutionPolicy, class ForwardIt >
ForwardIt min_element( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last );(2)(since C++17)	
template< class ForwardIt, class Compare >
ForwardIt min_element( ForwardIt first, ForwardIt last, Compare comp );(3)(until C++17)
template< class ForwardIt, class Compare >
constexpr ForwardIt min_element( ForwardIt first, ForwardIt last, Compare comp );(3)(since C++17)
template< class ExecutionPolicy, class ForwardIt, class Compare >
ForwardIt min_element( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last,
                       Compare comp );(4)(since C++17)
四 max_element
template< class ForwardIt >
ForwardIt max_element( ForwardIt first, ForwardIt last );(1)(until C++17)
template< class ForwardIt >
constexpr ForwardIt max_element( ForwardIt first, ForwardIt last );(1)(since C++17)
template< class ExecutionPolicy, class ForwardIt >
ForwardIt max_element( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last );(2)(since C++17)	
template< class ForwardIt, class Compare >
ForwardIt max_element( ForwardIt first, ForwardIt last, Compare comp );(3)(until C++17)
template< class ForwardIt, class Compare >
constexpr ForwardIt max_element( ForwardIt first, ForwardIt last, Compare comp );(3)(since C++17)
template< class ExecutionPolicy, class ForwardIt, class Compare >
ForwardIt max_element( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, 
                       Compare comp );(4)(since C++17)
五 minmax_element (C++11)
template< class ForwardIt >
std::pair<ForwardIt,ForwardIt>
minmax_element( ForwardIt first, ForwardIt last );(1)(since C++11)(until C++17)
template< class ForwardIt >
constexpr std::pair<ForwardIt,ForwardIt>
minmax_element( ForwardIt first, ForwardIt last );(1)(since C++17)
template< class ExecutionPolicy, class ForwardIt >
std::pair<ForwardIt,ForwardIt>
minmax_element( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last );(2)(since C++17)	
template< class ForwardIt, class Compare >
std::pair<ForwardIt,ForwardIt>
minmax_element( ForwardIt first, ForwardIt last, Compare comp );(3)(since C++11)(until C++17)
template< class ForwardIt, class Compare >
constexpr std::pair<ForwardIt,ForwardIt>
minmax_element( ForwardIt first, ForwardIt last, Compare comp );(3)(since C++17)
template< class ExecutionPolicy, class ForwardIt, class Compare >
std::pair<ForwardIt,ForwardIt>
minmax_element( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, Compare comp );(4)(since C++17)
六 参考
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值