C++ のベクトルからの最大値と最小値

Shikha Chaudhary 2023年10月12日
  1. C++ で for ループを使用してベクトルから最大値と最小値を求める
  2. C++ で std::max_element および std::min_element 関数を使用してベクトルから最大値と最小値を取得する
  3. C++ で std::minmax_element 関数を使用してベクトルから最大値と最小値を取得する
C++ のベクトルからの最大値と最小値

C++ のベクトルは、自動的にサイズを変更できる動的配列に他なりません。ベクトルは要素のコンテナであるため、ベクトルに含まれる最大値または最小値を調べたい場合があります。

ベクトルを処理するときは、配列内の最大要素または最小要素を検索するときと同じようにループを使用できます。この記事では、同じことを行うのに役立ついくつかのライブラリ関数についても説明します。

C++ で for ループを使用してベクトルから最大値と最小値を求める

以下の例では、2つの関数テンプレートがあります。最大要素を求めるための maxElement と最小要素を求めるための minElementmain() ブロック内で、ベクトルマークを定義し、それをテンプレート関数に渡します。

minElement 関数と maxElement 関数によって返される値は、それぞれ変数 min,max に格納され、これらの変数を画面に出力します。maxElement 関数には、マクロ INT_MIN 値を含む変数 max があり、for ループを使用してすべてのベクトル要素を調べ、max に格納されている値と比較します。

そこに格納されている値よりも大きい要素が見つかった場合は、max の値を更新し、ベクターのすべての要素に対して実行されます。関数 maxElement は、変数 max の最後に更新された値を返します。これは、ベクトル marks から最大値を取得する方法です。

minElement 関数も同じように機能し、ベクトルの最小値を返します。ループを使用して、C++ のベクトルから最大値と最小値を求める例を見てみましょう。

コード:

#include <climits>
#include <iostream>
#include <vector>

using namespace std;

template <typename D>
int maxElement(vector<D> const &v) {
  int max = INT_MIN;
  for (const D &i : v) {
    if (max < i) {
      max = i;
    }
  }
  return max;
}

template <typename D>
int minElement(vector<D> const &v) {
  int min = INT_MAX;
  for (const D &i : v) {
    if (min > i) {
      min = i;
    }
  }
  return min;
}

int main() {
  vector<int> marks = {23, 45, 65, 23, 43, 67, 87, 12};

  int min = minElement(marks);
  int max = maxElement(marks);

  cout << "The minimum marks are: " << min << endl;
  cout << "The maximum marks are: " << max << endl;

  return 0;
}

出力:

The minimum marks are: 12
The maximum marks are: 87

これは、C++ のベクトルから最大要素と最小要素を求めるための簡単なアプローチです。

C++ で std::max_element および std::min_element 関数を使用してベクトルから最大値と最小値を取得する

C++ のベクトルから最大値と最小値を求めるには、それぞれ std::max_element 関数と std::min_element 関数を使用できます。

max_element 関数は最大値を指すイテレーターを返し、min_element 関数は両方とも (start, end) の範囲で最小値を指すイテレーターを返します。

構文:

*min_element(start_index, end_index);
*max_element(start_index, end_index);

次の例では、最初にベクトルの開始と終了へのポインタ、max_elementmin_element の両方の関数への marks を引数として渡します。max_element および min_element 関数によって返される値は、それぞれ変数 max および min に格納されます。

コード:

#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

int main() {
  vector<int> marks = {23, 34, 56, 75, 23, 44, 58};

  int max = *max_element(marks.begin(), marks.end());
  int min = *min_element(marks.begin(), marks.end());

  cout << "The minimum marks are: " << min << endl;
  cout << "The maximum marks are: " << max << endl;

  return 0;
}

出力:

The minimum marks are: 23
The maximum marks are: 75

これらの関数は両方とも、比較を行うための事前定義された関数の助けを借りて使用できることに注意してください。これらの機能の詳細については、こちらをご覧ください。

C++ で std::minmax_element 関数を使用してベクトルから最大値と最小値を取得する

std::minmax_element は、上記の 2つの関数の要約バージョンに似ています。それらを個別に使用する代わりに、std::minmax_element 関数を使用して、戻り値としてイテレーターのペアを取得できます。

この関数は、最初の値が最小要素を指し、2 番目の値が最大要素を指す 1 組の反復子を返します。たとえば、ベクトルの最初と最後のインデックス marks を関数 minmax_element に渡し、この関数によって返される値は、auto で定義された変数 res に格納されます。キーワード。

次に、dot(.) 演算子を使用して、反復子のペアから最小値と最大値を分離し、それらを変数 minmax に格納します。minmax_element 関数を使用して、C++ のベクトルから最大値と最小値を取得します。

コード:

#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

int main() {
  vector<int> marks = {34, 23, 56, 75, 23, 67, 88, 12};

  auto res = minmax_element(marks.begin(), marks.end());
  int min = *res.first;
  int max = *res.second;

  cout << "The minimum marks are: " << min << endl;
  cout << "The maximum marks are: " << max << endl;

  return 0;
}

出力:

The minimum marks are: 12
The maximum marks are: 88

以下は、ベクトルの最大値と最小値のインデックスも返す上記のコードの修正バージョンです。これは、最初と最後の要素の間の要素数を計算する std::distance 関数を使用して行われます。

コード:

#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

int main() {
  vector<int> marks = {34, 23, 56, 75, 23, 67, 88, 12};

  auto res = minmax_element(marks.begin(), marks.end());
  int min = *res.first;
  int max = *res.second;

  int indx_max = distance(marks.begin(), res.first);
  int indx_min = distance(marks.begin(), res.second);

  cout << "The minimum marks are: " << min << endl;
  cout << "Found at index: " << indx_min << endl;

  cout << "The maximum marks are: " << max << endl;
  cout << "Found at index: " << indx_max << endl;

  return 0;
}

出力:

The minimum marks are: 12
Found at index: 6
The maximum marks are: 88
Found at index: 7

この関数については、このドキュメントを確認してください。これは、C++ のベクトルから最大値と最小値を取得する方法に関するものです。

関連記事 - C++ Vector