(1) max_elemnt・min_elementを使った方法
max_elemnt・min_elementとは?
- vector内の最大値・最小値のイテレータを取得することができる関数です。
- イテレータとして取得できるので、「*取得したイテレータ」とすることで最大値・最小値の表示が可能となります。
- 関数の引数は共通で次のようになっています。
第1引数 | vectorの先頭イテレータ |
---|---|
第2引数 | vectorの末尾イテレータ |
- 詳しい使い方は以下の公式サイトを参考にしてください。
min_element - cpprefjp C++日本語リファレンス
max_element - cpprefjp C++日本語リファレンス
使用例1:最大値・最小値を取得
ソースコード
#include <iostream> #include <vector> #include <algorithm> int main () { // 宣言 std::vector<int> v{3, 4, -1, 7, 5, 8}; // 最大値・最小値のイテレータを取得 auto maxIte = std::max_element(v.begin(), v.end()); auto minIte = std::min_element(v.begin(), v.end()); // 表示 std::cout << "max = " << *maxIte << std::endl; std::cout << "min = " << *minIte << std::endl; }
実行結果
max = 8 min = -1
使用例2:範囲指定で最大値を取得
- 引数のイテレータを調整することで、1~4番目の要素の最大値 or 最小値を求めるといったこともできます。
ソースコード
#include <iostream> #include <vector> #include <algorithm> int main () { // 宣言 std::vector<int> v{3, 4, -1, 7, 5, 8}; // 1~4番目(4, -1, 7, 5)から最大値を求める auto maxIte = std::max_element(v.begin() + 1, v.begin() + 5); // 表示 std::cout << "max = " << *maxIte << std::endl; }
実行結果
max = 7
(2) minmax_elementを使った方法
minmax_elementとは?
- min_elemetとmax_elemetをまとめたもので、vector内の最大値・最小値のイテレータを同時に取得できる関数です。
- 最小値のイテレータ、最大値のイテレータの順に取得します。
- 詳しい使い方は以下の公式サイトを参考にしてください。
使用例:最大値・最小値を取得
ソースコード
#include <iostream> #include <algorithm> #include <vector> int main() { std::vector<int> a = { 1, 5, 2, 3 }; auto [minIte, maxIte] = std::minmax_element(a.begin(), a.end()); std::cout << "最小値:" << *minIte << std::endl; std::cout << "最大値:" << *maxIte << std::endl; }
実行結果
最小値:1 最大値:5
(3) std::sortを使った方法
概要
- sortを使ってvectorを降順 or 昇順に並び替えて、その先頭・末尾の要素を取り出す方法です。
- 2番目に大きい要素も取り出したいなどの場合はこちらがよいかも?
使用例:最大値・最小値を求める
ソースコード
#include <iostream> #include <vector> #include <algorithm> int main () { // 宣言 std::vector<int> v{3, 4, -1, 7, 5, 8}; // 昇順ソート std::sort(v.begin(), v.end()); // 最小値(先頭)、最大値(末尾)のイテレータを取得 auto maxIte = v.begin(); auto minIte = --v.end(); // 表示 std::cout << "max = " << *maxIte << std::endl; std::cout << "min = " << *minIte << std::endl; }
実行結果
max = -1 min = 8