C++ STL(標準テンプレートライブラリ)とは?3大コンポーネントの基本を解説
C++のSTL(Standard Template Library:標準テンプレートライブラリ)は、C++で広く使われるアルゴリズムやデータ構造を汎用的なテンプレートクラスとして提供する強力なライブラリです。vector(可変長配列)、list(リスト)、queue(キュー)、stack(スタック)など、頻繁に利用されるクラスや関数が含まれています。
STLは「コンテナ」「アルゴリズム」「イテレータ」から構成される汎用ライブラリであり、すべての部品がテンプレートによってパラメータ化されています。そのため、STLを使いこなすには、テンプレートクラスに関する基礎知識が前提となります。
テンプレートとは、C++の言語機能の一つで、関数やクラスを特定の型に依存しない「ジェネリック(総称)」な形で記述できる仕組みです。これにより、同じ関数やクラスを型ごとに書き直すことなく、さまざまなデータ型に対して再利用できます。
STLの3つの主要コンポーネント
C++標準テンプレートライブラリは、次の3つのよく整理されたコンポーネントで構成されています。
1. コンテナ(Containers)
コンテナは、特定の種類のオブジェクトのコレクションを管理するために使用されます。deque、list、vector、mapなど、用途に応じた複数の種類が用意されています。
シーケンスコンテナ(Sequence Containers)
要素に順番にアクセスできるデータ構造を実装したコンテナです。
- vector
- list
- deque
- array
- forward_list
コンテナアダプタ(Container Adaptors)
シーケンスコンテナをベースに、異なるインターフェースを提供するコンテナです。
- queue
- priority_queue
- stack
連想コンテナ(Associative Containers)
ソート済みのデータ構造を実装しており、高速な検索(計算量O(log n))が可能です。
- set
- multiset
- map
- multimap
非順序連想コンテナ(Unordered Associative Containers)
順序を持たないデータ構造を実装し、高速な検索を可能にするコンテナです。内部にはハッシュテーブルが使用されています。
- unordered_set
- unordered_multiset
- unordered_map
- unordered_multimap
2. アルゴリズム(Algorithms)
アルゴリズムはコンテナに対して動作します。コンテナの内容に対する初期化、ソート、検索、変換などを効率的に行うための手段を提供します。
主なアルゴリズムの分類
- ソート(Sorting)
- 検索(Searching)
- 重要なSTLアルゴリズム
- 配列に便利なアルゴリズム
- パーティション操作(Partition Operations)
3. イテレータ(Iterators)
イテレータは、オブジェクトのコレクション(コンテナまたはその部分集合)の要素を順にたどるために使用されます。ポインタのように振る舞い、コンテナとアルゴリズムをつなぐ重要な役割を担っています。
-
C++ STLのスタック(stack)徹底解説!LIFO構造の基本操作とサンプルコード
C++ STLにおけるスタック(stack)は、LIFO(Last In First Out:後入れ先出し)構造として実装されるコンテナです。LIFOとは「最後に入れたものが最初に取り出される」という意味で、本を一冊ずつ積み上げた山をイメージすると理解しやすいでしょう。一番上に置いた本(=最後に挿入された要素)が最初に取り出されることから、この構造はLIFOと呼ばれています。 スタックで使える主な操作 1. top() – 最上位要素の取得 スタックの最上位(先頭)にある要素への参照を返します。要素自体は削除されません。 構文:name_of_stack.top() 引数:なし 戻り値:ス
-
C++ STL(標準テンプレートライブラリ)のプライオリティキュー徹底解説
プライオリティキュー(優先度付きキュー)は、優先度を持つ要素のコレクションを格納するための抽象データ型(ADT)です。各要素は優先度に基づいて挿入・削除が行われ、最も優先度の高い要素はいつでも取り出すことができます。スタックやキュー、リストなどの線形データ構造とは異なり、プライオリティキューは要素を格納位置の順序ではなく、優先度に基づいて管理する点が大きな特徴です。C++では、STLの <queue> ヘッダで提供されており、デフォルトでは最大値が先頭に来る構造になっています。プライオリティキューがサポートする主な操作size() — プライオリティキュー内の要素数を返し、サイズを