C++のSTLを使ってベクトル内の最大要素を求める方法
このチュートリアルでは、C++のSTL(標準テンプレートライブラリ)を使用して、ベクトルの中から最大要素を見つける方法について解説します。
ベクトルから最大要素を取得するには、<algorithm>ヘッダーに用意されているmax_element()関数を使用します。この関数は、指定したイテレータの範囲[first, last)の中から最大の要素を指すイテレータを返します。戻り値はイテレータであるため、先頭に間接参照演算子(*)を付けることで、実際の要素の値を取得できます。
サンプルコード
#include <bits/stdc++.h>
using namespace std;
int main(){
// ベクトルの定義
vector<int> a = { 1, 45, 54, 71, 76, 12 };
cout << "Vector: ";
for (int i = 0; i < a.size(); i++)
cout << a[i] << " ";
cout << endl;
// 最大要素の検索
cout << "Max Element = " << *max_element(a.begin(), a.end());
return 0;
}実行結果
Vector: 1 45 54 71 76 12 Max Element = 76
解説
上記のコードでは、まず整数型のベクトルaを初期化し、forループですべての要素を出力しています。その後、*max_element(a.begin(), a.end())を呼び出すことで、ベクトル全体の範囲から最大値「76」を取得しています。
なお、max_element()の計算量はO(n)であり、要素数に比例して処理時間が増加します。また、同様の方法で*min_element()を使えば最小要素も簡単に求められるため、セットで覚えておくと便利です。
-
C++で行列の平均ベクトルを求める方法をわかりやすく解説
M × N の行列が与えられたとき、その平均ベクトルを求めることを考えます。例えば、次のような 3 × 3 の行列があるとします。123456789このとき、平均ベクトルは [4, 5, 6] となります。これは、各列の平均値がそれぞれ次のように計算されるためです。1列目:(1 + 4 + 7) / 3 = 42列目:(2 + 5 + 8) / 3 = 53列目:(3 + 6 + 9) / 3 = 6この例からも分かるように、行列の平均ベクトルとは「各列の平均値を要素として持つベクトル」のことです。したがって、行列の各列ごとに平均を計算し、その結果を順に並べるだけで平均ベクトルを求められます。
-
C++で補助スタックを使わずにO(1)でスタックの最大値を取得する方法
スタックに格納されている要素の中から最大値をO(1)の時間で取得できるスタックを実装したいと考えます。ただし、ここには重要な制約があります。補助スタックなどの追加データ構造を使用してはならず、追加スペースはO(1)でなければなりません。アルゴリズムのポイントこの問題は、ユーザー定義のスタッククラスに現在の最大値を保持する変数を持たせ、push時に数式を使って値を「エンコード」することで解決できます。各操作は次のように処理します。push操作:挿入する要素xが現在の最大値より大きい場合は「2 * x − max」をスタックにプッシュし、最大値をxに更新します。そうでなければ、xをそのままプッシュ