【C++ STL】listのbegin()とend()関数の使い方を徹底解説
本記事では、C++のSTLにおけるlist begin()関数とlist end()関数の機能と具体的な使い方について解説します。
STLにおけるlist(リスト)とは
listは、シーケンス内の任意の位置に対して定数時間での挿入・削除を可能にするデータ構造です。listは双方向連結リストとして実装されており、非連続的なメモリ割り当てが可能です。
配列やvector、dequeと比較すると、コンテナ内の任意の位置への要素の挿入・抽出・移動において優れたパフォーマンスを発揮するのが特徴です。その一方で、要素への直接アクセス(ランダムアクセス)は低速である点に注意が必要です。
また、listはforward_listとよく似ていますが、forward_listは単方向連結リストであり、前方方向にしかイテレートできないという違いがあります。
begin()関数とは
listのbegin()関数は、リストの先頭要素を指すイテレータを返すために使用されます。
構文
list_name.begin( )
end()関数とは
listのend()関数は、リストの終端(最後の要素の次の位置)を指すイテレータを返すために使用されます。
構文
list_name.end( )
基本的な手順
まず、listを初期化します。
次に、begin()とend()を組み合わせてイテレーション処理を定義します。
上記の手順に従うことで、begin()とend()関数を使ってリストの全要素を出力できます。
サンプルコード1:整数のリスト
// C++コード:STLにおけるbegin()とend()関数の動作を示す
#include <iostream>
#include <list>
using namespace std;
int main() {
list<int> lst = { 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
// リストの内容を出力
cout << "Elements in List: ";
for (auto x = lst.begin(); x != lst.end(); ++x)
cout << *x << " ";
return 0;
}出力
上記のコードを実行すると、以下の出力が生成されます。
Elements of List: 11 12 13 14 15 16 17 18 19 20
サンプルコード2:文字のリスト
// C++コード:listのbegin()とend()関数の動作を示す
#include <iostream>
#include <list>
using namespace std;
int main() {
list<char> lst = { 'D', 'E', 'S', 'I', 'G', 'N' };
// リストの内容を出力
cout << "Elements in List: ";
for (auto x = lst.begin(); x != lst.end(); ++x)
cout << *x << " ";
return 0;
}出力
上記のコードを実行すると、以下の出力が生成されます。
Elements in List: D E S I G N
まとめ
begin()はリストの先頭要素を指すイテレータを返し、end()は終端(最後の要素の次)を指すイテレータを返します。この2つの関数を組み合わせることで、forループによってリスト全体を効率的に走査できます。なお、C++11以降では範囲ベースfor文(range-based for)を利用すれば、さらに簡潔に同じ処理を記述することも可能です。
-
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()が返すイテレータは有効な要素を参照しておらず、主にループの終了条件として使用されます。 サンプ