【完全ガイド】C++標準ライブラリのヘッダーファイル一覧|カテゴリ別に解説
C++標準ライブラリは、目的別に分類された多数のライブラリで構成されています。本記事では、それぞれのカテゴリごとに含まれるヘッダーファイルとその役割を一覧形式でわかりやすく解説します。C++11・C++17・C++20で新たに追加されたヘッダーについても併せて確認できます。
ユーティリティライブラリ(Utilities library)
<cstdlib> − プログラムの制御、動的メモリ確保、乱数生成、ソートや検索など、汎用的なユーティリティを提供します。
<csignal> − シグナル管理のための関数およびマクロ定数(SIGINT など)を提供します。
<csetjmp> − 実行コンテキストを保存・復元(setjmp / longjmp)するためのマクロおよび関数を提供します。
<cstdarg> − 可変長引数リストを扱うための機能を提供します。
<typeinfo> − 実行時型情報(RTTI)に関するユーティリティを提供します。
<bitset> − 固定長ビット列を扱う std::bitset のクラステンプレートを定義します。
<functional> − 関数オブジェクト、関数呼び出し、バインド操作、参照ラッパーなどを提供します。
<utility> − std::pair や std::move など、さまざまな汎用ユーティリティコンポーネントを提供します。
<ctime> − C 形式の日付・時刻処理ユーティリティを提供します。
<cstddef> − size_t や NULL などの標準マクロおよび typedef を定義します。
<typeindex>(C++11以降) − type_info オブジェクトのラッパーであり、連想コンテナや非順序連想コンテナのインデックスとして利用できます。
<type_traits>(C++11以降) − コンパイル時に型の性質を調べるための型特性(type traits)を提供します。
<chrono>(C++11以降) − C++ 向けの時刻・時間処理ユーティリティを提供します。
<initializer_list>(C++11以降) − const T 型オブジェクトの配列へのアクセスを提供する軽量なプロキシオブジェクトを定義するライブラリです。
<tuple>(C++11以降) − 異なる型の値からなる固定サイズのコレクションを定義するライブラリです。std::pair を一般化したものです。
<any>(C++17以降) − 任意の型の単一の値を型安全に保持できるコンテナである any クラスを提供します。
<optional>(C++17以降) − 値が存在する場合もしない場合も表現できる「任意の包含値」を管理する std::optional クラステンプレートを提供します。
<variant>(C++17以降) − 型安全な union を表す std::variant クラステンプレートです。インスタンスは常にいずれかの代替型の値を保持します(エラー時は値を持ちません)。
<compare>(C++20以降) − 三方比較演算子(<=>)のサポートを提供します。
動的メモリ管理(Dynamic memory management)
<new> − 低レベルのメモリ管理ユーティリティです。new 式は、生成されたスコープに寿命が限定されない「動的記憶域期間」を持つオブジェクトやオブジェクト配列を作成する唯一の方法です。
<memory> − スマートポインタやアロケータなど、高レベルのメモリ管理ユーティリティを提供します。
<scoped_allocator>(C++11以降) − std::scoped_allocator_adaptor クラステンプレートは、map の set の vector のような多段コンテナで使用できるアロケータです。
<memory_resource>(C++17以降) − メモリリソースをカプセル化するクラス群への抽象インターフェースとして、std::pmr::memory_resource クラスを提供します。
数値の限界(Numeric limits)
<climits> − 整数型の上限・下限などの限界値を定義します。
<cfloat> − 浮動小数点型の限界値を定義します。
<limits> − 算術型の特性を照会するための標準化された手段(std::numeric_limits)を提供します。
<cstdint>(C++11以降) − int32_t などの固定幅整数型およびその他の型の限界を定義します。
<cinttypes>(C++11以降) − C のバイト文字列・ワイド文字列から std::intmax_t / std::uintmax_t への変換関数、一部の数学関数のオーバーロード、さらに <cstdint> で宣言された型に対する C 形式の入出力書式マクロを提供します。
エラー処理(Error handling)
<exception> − 例外処理のためのユーティリティを提供します。
<stdexcept> − std::runtime_error などの標準例外オブジェクトを定義します。
<cassert> − 引数をゼロと比較する、条件付きコンパイルされる assert マクロを提供します。
<cerrno> − 直近のエラー番号を格納する errno マクロを提供します。
<system_error>(C++11以降) − std::error_code はプラットフォーム依存のエラーコードです。各 std::error_code オブジェクトは、OS や低レベルインターフェースに起因するエラーコードと、それに対応する std::error_category 型オブジェクトへのポインタを保持します。
文字列ライブラリ(Strings library)
<cctype> − 文字データの種類(数字・英字など)を判定する関数を提供します。
<cwctype> − ワイド文字データの種類を判定する関数を提供します。
<cstring> − 各種のナロー文字列処理関数(strlen、strcpy など)を提供します。
<cwchar> − 各種のワイド文字列およびマルチバイト文字列処理関数を提供します。
<string> − std::basic_string クラステンプレート(std::string など)を定義します。
<cuchar>(C++11以降) − C 形式の Unicode 文字変換関数を提供します。
<string_view>(C++17以降) − basic_string_view クラステンプレートは、先頭要素が位置ゼロにある char 風オブジェクトの定数かつ連続したシーケンスを参照できるオブジェクトを記述します。
コンテナライブラリ(Containers library)
<array>(C++11以降) − std::array コンテナを定義します。
<vector> − std::vector コンテナを定義します。
<deque> − std::deque コンテナを定義します。
<list> − std::list コンテナを定義します。
<forward_list>(C++11以降) − std::forward_list コンテナを定義します。
<set> − std::set および std::multiset 連想コンテナを定義します。
<map> − std::map および std::multimap 連想コンテナを定義します。
<unordered_set>(C++11以降) − std::unordered_set および std::unordered_multiset 非順序連想コンテナを定義します。
<unordered_map>(C++11以降) − std::unordered_map および std::unordered_multimap 非順序連想コンテナを定義します。
<stack> − std::stack コンテナアダプタを定義します。
<queue> − std::queue および std::priority_queue コンテナアダプタを定義します。
アルゴリズムライブラリ(Algorithms library)
<algorithm> − コンテナを操作するソート・検索・変換などの各種アルゴリズムを提供します。
<execution>(C++17以降) − アルゴリズムの並列実行版のための、定義済み実行ポリシーを提供します。
イテレータライブラリ(Iterators library)
<iterator> − コンテナを走査するための各種イテレータを提供します。
数値計算ライブラリ(Numerics library)
<cmath> − 平方根・三角関数など、一般的な数学関数を提供します。
<complex> − 複素数型 std::complex を定義します。
<valarray> − 数値配列を表現・操作するためのクラスを提供します。
<random>(C++11以降) − 乱数生成器および確率分布を提供します。
<numeric> − コンテナ内の値に対する累積和などの数値演算を提供します。
<ratio>(C++11以降) − コンパイル時有理数演算を提供します。
<cfenv>(C++11以降) − 浮動小数点環境へアクセスする関数を提供します。
入出力ライブラリ(Input/output library)
<iosfwd> − 入出力ライブラリ内のすべてのクラスの前方宣言を提供します。
<ios> − std::ios_base クラス、std::basic_ios クラステンプレートおよび複数の typedef を定義します。
<istream> − std::basic_istream クラステンプレートおよび複数の typedef を定義します。
<ostream> − std::basic_ostream、std::basic_iostream クラステンプレートおよび複数の typedef を定義します。
<iostream> − cin や cout など、いくつかの標準ストリームオブジェクトを定義します。
<fstream> − ファイル入出力用の std::basic_fstream、std::basic_ifstream、std::basic_ofstream クラステンプレートおよび複数の typedef を定義します。
<sstream> − 文字列入出力用の std::basic_stringstream、std::basic_istringstream、std::basic_ostringstream クラステンプレートおよび複数の typedef を定義します。
<syncstream>(C++20以降) − std::basic_osyncstream、std::basic_syncbuf および関連する typedef を定義します。
<strstream>(非推奨) − std::strstream、std::istrstream、std::ostrstream を定義します。
<iomanip> − 入出力の書式を制御するためのヘルパー関数を提供します。
<streambuf> − std::basic_streambuf クラステンプレートを定義します。
<cstdio> − printf や scanf など、C 形式の入出力関数を提供します。
ローカライゼーションライブラリ(Localization library)
<locale> − ローカライゼーション(地域化)ユーティリティを提供します。
<clocale> − C 形式のローカライゼーションユーティリティを提供します。
<codecvt>(C++11以降/C++17で非推奨) − Unicode 変換機能を提供します。
正規表現ライブラリ(Regular Expressions library)
<regex>(C++11以降) − 正規表現処理をサポートするクラス、アルゴリズム、イテレータを提供します。
アトミック操作ライブラリ(Atomic Operations library)
<atomic>(C++11以降) − データ競合を防ぐアトミック操作ライブラリを提供します。
スレッドサポートライブラリ(Thread support library)
<thread>(C++11以降) − std::thread クラスおよびそのサポート関数を提供します。
<mutex>(C++11以降) − mutex などの相互排他プリミティブを提供します。
<shared_mutex>(C++14以降) − 共有相互排他プリミティブを提供します。
<future>(C++11以降) − 非同期計算のためのプリミティブ(std::future、std::promise など)を提供します。
<condition_variable>(C++11以降) − スレッドの待機条件を管理する condition_variable を提供します。
ファイルシステムライブラリ(Filesystem library)
<filesystem>(C++17以降) − パスを扱う std::filesystem::path クラスおよびそのサポート関数を提供します。
C++標準ライブラリのヘッダーはバージョンごとに拡張され続けています。特に C++11 以降は大幅な機能追加が行われたため、使用しているコンパイラの対応状況を確認しながら、これらのヘッダーを活用すると良いでしょう。
-
C++標準テンプレートライブラリ(STL)で使える二分探索の基本と使い方
二分探索(バイナリサーチ)は「対数探索」とも呼ばれる検索アルゴリズムで、ソート済みの配列から特定の要素を効率よく探し出す手法です。配列を再帰的に半分に分割しながら探索範囲を絞り込み、中央の位置に目的の要素が見つかればその位置を返し、見つからなければ分割と照合を繰り返します。探索のたびに候補が半分に減っていくため、計算量はO(log n)と非常に高速です。 二分探索の仕組み このアルゴリズムは、ソート済み配列の中央の要素と、探したい要素を比較することで動作します。 探索対象の要素が中央の要素と等しい場合 → その要素のインデックス(位置)を返します。 探索対象の要素が中央の要素より大きい場合 →
-
C++ STL(標準テンプレートライブラリ)のプライオリティキュー徹底解説
プライオリティキュー(優先度付きキュー)は、優先度を持つ要素のコレクションを格納するための抽象データ型(ADT)です。各要素は優先度に基づいて挿入・削除が行われ、最も優先度の高い要素はいつでも取り出すことができます。スタックやキュー、リストなどの線形データ構造とは異なり、プライオリティキューは要素を格納位置の順序ではなく、優先度に基づいて管理する点が大きな特徴です。C++では、STLの <queue> ヘッダで提供されており、デフォルトでは最大値が先頭に来る構造になっています。プライオリティキューがサポートする主な操作size() — プライオリティキュー内の要素数を返し、サイズを