【C++ STL】forward_list::begin()とforward_list::end()の使い方を徹底解説
本記事では、C++のSTL(Standard Template Library)におけるforward_list::begin()およびforward_list::end()関数の動作、構文、具体的な使用例について詳しく解説します。
STLにおけるforward_listとは?
forward_listは、シーケンス内の任意の位置に対して定数時間での挿入・削除操作を可能にするシーケンスコンテナです。内部的には単方向リンクリストとして実装されており、各要素が次の要素へのリンクを持つことで、要素の順序が維持されます。
forward_list::begin()とは?
forward_list::begin()は、C++のSTLに組み込まれた関数で、<forward_list>ヘッダー内で宣言されています。begin()は、forward_listコンテナの先頭要素を指すイテレータを返します。実際の開発では、begin()とend()を組み合わせて使用することで、forward_listコンテナの範囲(レンジ)を指定するのが一般的です。
構文
forwardlist_container.begin();
この関数は引数を受け取りません。
戻り値
この関数は、コンテナの先頭要素を指すイテレータを返します。なお、forward_listは単方向リンクリストであるため、返されるイテレータは前方イテレータ(Forward Iterator)です。
使用例
#include <bits/stdc++.h>
using namespace std;
int main(){
// forward_listの作成
forward_list<int> forwardList = { 4, 1, 2, 7 };
cout<<"Printing the elements of a forward List\n";
// begin()を呼び出して先頭要素を指す
for (auto i = forwardList.begin(); i != forwardList.end(); ++i)
cout << ' ' << *i;
return 0;
}出力
上記のコードを実行すると、以下のような出力が得られます。
Printing the elements of a forward List 4 1 2 7
forward_list::end()とは?
forward_list::end()も、C++のSTLに組み込まれた関数で、<forward_list>ヘッダー内で宣言されています。end()は、forward_listコンテナの末尾要素の「次の位置」(過去末:past-the-end)を指すイテレータを返します。このイテレータは実際の要素を参照していない点に注意してください。begin()とend()を組み合わせることで、コンテナ全体の範囲を表現できます。
構文
forwardlist_container.end();
この関数は引数を受け取りません。
戻り値
この関数は、コンテナの末尾要素の次の位置を指すイテレータを返します。ループ処理では、このイテレータに到達した時点で走査が終了したことを意味します。
使用例
#include <bits/stdc++.h>
using namespace std;
int main(){
// forward_listの作成
forward_list<int> forwardList = { 4, 1, 2, 7 };
cout<<"Printing the elements of a forward List\n";
// begin()からend()まで範囲for的に走査する
for (auto i = forwardList.begin(); i != forwardList.end(); ++i)
cout << ' ' << *i;
return 0;
}出力
上記のコードを実行すると、以下のような出力が得られます。
Printing the elements of a forward List 4 1 2 7
まとめ
begin()とend()は、forward_listの要素を走査するための基本となるメンバ関数です。begin()が先頭要素へのイテレータを返すのに対し、end()は末尾の次の位置を指すため、両者をi != forwardList.end()のように比較しながらループを回すことで、コンテナ内の全要素へ安全にアクセスできます。forward_listだけでなく、vectorやlistなど他のSTLコンテナでも同様のパターンが使えるため、ぜひ覚えておきましょう。
-
C++ STLのvector::begin()とvector::end()の使い方を徹底解説
C++のSTL(標準テンプレートライブラリ)におけるvector::begin()およびvector::end()は、ベクター内の要素を走査するために欠かせないメンバ関数です。本記事では、それぞれの役割と実際のコード例を通じて、その使い方をわかりやすく解説します。 vector::begin() とは vector::begin()は、コンテナ(ベクター)の先頭要素を指すイテレータを返す双方向イテレータ用の関数です。この戻り値を使うことで、ベクターの最初の要素から順番にアクセスすることができます。 vector::end() とは vector::end()は、コンテナの末尾(最後の要素の次の
-
【C++ STL】set::begin()とset::end()の使い方をサンプルコードで解説
C++のSTLコンテナであるstd::setには、要素を走査するための重要なメンバ関数としてbegin()とend()があります。 set::begin()は双方向イテレータの一種で、setコンテナの先頭要素を指すイテレータを返します。setは自動的に要素が昇順にソートされるため、begin()が指すのは常に最小の値を持つ要素です。 set::end()も同様に双方向イテレータを返しますが、こちらは最後の要素そのものではなく、最後の要素の「次」の位置(終端)を指す点に注意が必要です。つまり、end()が返すイテレータは有効な要素を参照しておらず、主にループの終了条件として使用されます。 サンプ