C++ のベクトルからの最大値と最小値
-
C++ で
for
ループを使用してベクトルから最大値と最小値を求める -
C++ で
std::max_element
およびstd::min_element
関数を使用してベクトルから最大値と最小値を取得する -
C++ で
std::minmax_element
関数を使用してベクトルから最大値と最小値を取得する
C++ のベクトルは、自動的にサイズを変更できる動的配列に他なりません。ベクトルは要素のコンテナであるため、ベクトルに含まれる最大値または最小値を調べたい場合があります。
ベクトルを処理するときは、配列内の最大要素または最小要素を検索するときと同じようにループを使用できます。この記事では、同じことを行うのに役立ついくつかのライブラリ関数についても説明します。
C++ で for
ループを使用してベクトルから最大値と最小値を求める
以下の例では、2つの関数テンプレートがあります。最大要素を求めるための maxElement
と最小要素を求めるための minElement
。main()
ブロック内で、ベクトルマーク
を定義し、それをテンプレート関数に渡します。
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_element
と min_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(.)
演算子を使用して、反復子のペアから最小値と最大値を分離し、それらを変数 min
と max
に格納します。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++ のベクトルから最大値と最小値を取得する方法に関するものです。