【C++】ベクトル内のターゲット値や条件に一致する要素数をカウントする方法
ベクトル(vector)が与えられたとき、その中からターゲット値や特定の条件に一致する要素の個数を求めるのが本記事の目的です。
ベクトルとは、サイズを動的に変更できるシーケンスコンテナの一種です。コンテナとは同一の型のデータを保持するオブジェクトのことであり、シーケンスコンテナは要素を厳密に線形の順序で格納します。
ベクトルは連続したメモリ領域に要素を格納し、添字演算子 [] を使って任意の要素へ直接アクセスすることができます。配列と異なり、ベクトルは実行時に必要に応じて縮小・拡張が可能で、記憶域の管理は自動的に行われます。
この実行時の伸縮機能を実現するために、ベクトルコンテナは将来の拡張に備えて余分な記憶域を確保することがあります。そのため、実際の容量(capacity)は現在の要素数(size)より大きくなる場合があります。つまりベクトルは、配列と比べてやや多くのメモリを消費する代わりに、効率的かつ動的な記憶域管理を実現しているのです。
具体例
入力 − vector vec = {1, 2, 3, 4, 4, 4, 4}
ターゲット = 4
出力 − カウント: 4
説明 − 与えられたベクトル内にターゲット値「4」は4回出現するため、カウントは4となります。
入力 − vector vec = {1, 2, 3}
ターゲット = 4
出力 − カウント: 0
説明 − 与えられたベクトル内にターゲット値「4」は1度も出現しないため、カウントは0となります。
プログラムのアプローチ
ベクトルを入力として受け取り、vector型の変数(ここでは vec とする)に格納します。
ターゲット値を整数値として設定します。
カウント結果を保存するための一時変数を用意します。
C++ STL に組み込まれている
count()関数を呼び出し、引数としてvec.begin()、vec.end()、ターゲット値を渡します。結果を出力します。
サンプルコード
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> myvector{ 1, 2, 3, 4, 4, 4, 4, 4 };
int target = 4;
int res = count(myvector.begin(), myvector.end(), target);
cout << "Target is: " << target << "\nCount is: " << res << endl;
return 0;
}
出力結果
上記のコードを実行すると、次の出力が得られます。
Target is: 4 Count is: 5
-
C++で解く:二分探索木(BST)からターゲットに最も近いk個の値を効率的に取得する方法
問題概要 二分探索木(Binary Search Tree:BST)とターゲット値が与えられたとき、そのBSTの中からターゲットに最も近いk個の値を見つけることを考えます。ここで注意すべき点是として、ターゲット値は浮動小数点数であるという点が挙げられます。なお、kは常に有効な値であり、k ≤ 全ノード数が保証されているものとします。 例えば、次のようなBSTが入力として与えられた場合を考えます。 このとき、target = 3.714286、k = 2 とすると、出力は [4, 3] となります。 解法のアプローチ この問題は、ターゲットより小さい値の候補と大きい値の候補をそれぞれ管理する2
-
C++でvectorの全要素を合計する方法|std::accumulateの使い方を解説
C++のvector(可変長配列)に格納された全要素の合計は、標準ライブラリのstd::accumulate関数を使うことで非常に簡単に求められます。この関数は<numeric>ヘッダーで定義されており、指定した範囲内のすべての値を、第3引数で与えた初期値へ順次加算していきます。 アルゴリズム 開始 vector型の変数vを宣言する 配列形式でvに複数の値を初期化する 「すべての要素の合計は:」と出力する accumulate(v.begin(), v.end(), 0) を呼び出し、vの全要素の合計を計算する 合計の結果を出力する 終了 サンプルコード #