C++アルゴリズム要素の最大値と最小値


前に書くと
  • ここでは、要素の最大値と最小値を取得するためのC++標準ライブラリの3つの非容易アルゴリズム(nonmodifying algorithm):min_element、 max_Elementとmin_max_element.同様にヘッダファイルに定義されます.

  • 二Demo
  • コード:
  • #include 
    #include 
    #include 
    #include 
    #include 
    
    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;
    }
    
  • std::distance C++iterator(1)いくつかの補助関数
  • を参照してください.
  • 結果:
  • 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)
    

    六参考
  • 『C++標準ライブラリ第2版』
  • cppreference min_element
  • cppreference max_element
  • cppreference minmax_element