C++ STLのmultiset::cbegin()およびcend()関数の使い方を徹底解説
本記事では、C++ STLにおける multiset::cbegin() および multiset::cend() 関数の動作、構文、そして具体的な使用例について詳しく解説します。
C++ STLにおけるmultisetとは?
multiset(マルチセット)は、setコンテナとよく似たコンテナです。setと同様に、値をキーの形式で特定の順序に従って格納します。
multisetでも、setと同じく値はキーとして識別されます。setとの最大の違いは、setが重複しない一意なキーのみを持つのに対し、multisetでは同じキー値を複数持つことができる点です。
multisetのキーは、二分探索木(バイナリサーチツリー)の実装に利用されます。
multiset::cbegin()とは?
multiset::cbegin() はC++ STLに組み込まれた関数で、<set> ヘッダーファイル内で定義されています。cbegin()は「constant begin(定数開始)」を意味し、multisetコンテナの先頭要素を指す定数イテレータ(const_iterator)を返します。
この定数イテレータは、multisetコンテナを走査(イテレート)するためにのみ使用でき、コンテナの内容を変更することはできません。
構文
ms_name.cbegin();
パラメータ
この関数はパラメータを受け取りません。
戻り値
コンテナの最初の要素を指す定数イテレータを返します。
cbegin()の使用例
入力例
std::multiset<int> mymultiset = {1, 2, 2, 3, 4};
mymultiset.cbegin();出力例
1
サンプルコード
#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[] = {10, 20, 30, 40, 50, 60};
multiset<int> check(arr, arr + 6);
cout << "First element fetched using cbegin() function: " << *(check.cbegin()) << endl;
for(auto i = check.cbegin(); i != check.cend(); i++)
cout << *i << " ";
return 0;
}出力結果
First element fetched using cbegin() function: 10 10 20 30 40 50 60
multiset::cend()とは?
multiset::cend() もC++ STLに組み込まれた関数で、<set> ヘッダーファイル内で定義されています。cend()は「constant end(定数終端)」を意味し、multisetコンテナの最後の要素の「次」を指す定数イテレータを返します。
cbegin()と同様に、この定数イテレータはコンテナの走査専用であり、multisetコンテナの内容を変更することはできません。
構文
ms_name.cend();
パラメータ
この関数はパラメータを受け取りません。
戻り値
コンテナの最後の要素の次の位置を指す定数イテレータを返します。
cend()の使用例
入力例
std::multiset<int> mymultiset = {1, 2, 2, 3, 4};
mymultiset.cend();出力例
error
cend()が返すのは最後の要素の次の位置であるため、そのまま参照(デリファレンス)するとエラーになります。あくまでループの終了条件として使用する関数です。
サンプルコード
#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[] = {10, 20, 30, 40, 50, 60};
multiset<int> check(arr, arr + 6);
cout << "Elements in the list are: ";
for(auto i = check.cbegin(); i != check.cend(); i++)
cout << *i << " ";
return 0;
}出力結果
Elements in the list are: 10 20 30 40 50 60
まとめ
cbegin() と cend() を組み合わせることで、multisetの全要素を読み取り専用で安全に走査できます。コンテナの変更を意図せず防ぎたい場合や、const文脈での処理が必要な場面で特に有用です。通常の begin()/end() との違いは、返されるイテレータが定数イテレータであるという点だけなので、用途に応じて使い分けましょう。
-
C++ STLのatan2()関数の使い方を徹底解説!構文・戻り値・サンプルコード付き
atan2()関数は、座標yとxから逆正接(アークタンジェント)を求めるための関数です。ここでいうyとxは、それぞれy座標とx座標の値を指します。atan2()はC++のSTL(標準テンプレートライブラリ)に組み込まれている関数で、<cmath>ヘッダをインクルードすることで利用できます。通常のatan()関数と異なり、atan2()はxの符号も考慮して正しい象限の角度を返すため、実務でも広く使われています。atan2()関数の構文atan2(dataType var1, dataType var2)構文を見ると分かるように、atan2()関数はfloat型、double型、lon
-
C++ STLのacos()関数とは?使い方をサンプルコード付きで解説
C++ STLのacos()関数とはacos()関数は、ラジアン単位で与えられた値に対する逆余弦(アークコサイン)を返す関数で、C++のSTLに標準で組み込まれています。この関数は<cmath>ヘッダで定義されています。acos()関数の構文acos(var)構文から分かるように、acos()関数はfloat、double、long doubleのいずれかのデータ型を持つ引数varを1つ受け取ります。引数の値は-1から1の範囲内でなければなりません。範囲外の値を渡した場合はNaN(非数)が返される点に注意が必要です。戻り値は、-πからπの範囲におけるvarの逆余弦(ラジアン単位)で