標準
C++ライブラリは、
C++プログラミング言語の標準規格によって定められた、クラスや関数の集合体です。これは、開発者が様々なタスクを効率的にこなすための基盤となるものであり、汎用的なコンテナ、
アルゴリズム、
入出力機能、数学関数など、多岐にわたる機能を提供しています。また、ISO C90規格の標準C
ライブラリも含まれており、
C++11では
C99互換の
ライブラリも追加されました。
標準
C++ライブラリの大部分は、`std`
名前空間内に存在します。これにより、名前の衝突を避けることができ、より整理されたコードを記述することができます。
C++11規格以降では、標準
ライブラリに対して大幅な拡張や機能追加が行われ、現代的なプログラミングニーズに対応できるよう進化を続けています。
Standard Template Library (STL)
標準
C++ライブラリの中で特に重要な部分が、Standard Template Library (STL)です。STLは、コンテナ(データを格納するオブジェクト)、
アルゴリズム(データ処理のための関数)、
イテレータ(コンテナ内の要素を指すポインタのようなもの)、
関数オブジェクト(関数のように振る舞うオブジェクト)などで構成されており、汎用プログラミングの基礎となっています。
C++では、標準
ライブラリの機能を利用するために、対応する
ヘッダファイルをインクルードする必要があります。
C言語とは異なり、
C++の標準
ライブラリの
ヘッダファイルには、末尾に
拡張子 `.h` が付きません。以下に主な
ヘッダファイルとその内容をまとめます。
コンテナ
`<array>` (
C++11): 固定長の
配列を扱う。
`<deque>`:
両端キュー。
`<forward_list>` (
C++11): 単方向リスト。
`<list>`: 双方向リスト。
`<map>`: キーと値のペアを格納する連想コンテナ。
`<queue>`: キュー。
`<set>`: 重複を許さない要素の集合。
`<stack>`:
スタック。
`<unordered_set>` (
C++11): ハッシュを用いた重複を許さない要素の集合。
`<unordered_map>` (
C++11): ハッシュを用いたキーと値のペアを格納する連想コンテナ。
`<vector>`: 可変長の
配列。
一般
`<algorithm>`: ソート、検索などの
アルゴリズム。
`<any>` (
C++17): 任意の型の値を格納できる。
`<bitset>`: ビット列を扱う。
`<chrono>` (
C++11): 時間関連機能。
`<codecvt>` (
C++11,
C++17で非推奨化,
C++26で削除): 文字コード変換。
`<functional>`:
関数オブジェクトと高階関数。
`<iterator>`:
イテレータ。
`<locale>`: 地域化機能。
`<memory>`:
メモリ管理。
`<memory_resource>` (
C++17): カスタムメモリリソース。
`<optional>` (
C++17): 値が存在しない可能性がある型。
`<ratio>` (
C++11): コンパイル時有理数。
`<scoped_allocator>` (
C++11): スコープ付きアロケータ。
`<tuple>` (
C++11): 複数の値をまとめる。
`<typeindex>` (
C++11): 型を識別するためのインデックス。
`<type_traits>` (
C++11): 型の特性を調べる。
`<utility>`: ペアやムーブなどのユーティリティ。
`<variant>` (
C++17): 複数の型の値を格納できる型安全な共用体。
`<regex>` (
C++11):
正規表現。
`<string>`:
文字列。
`<string_view>` (
C++17):
文字列への軽量な参照。
`<filesystem>` (
C++17): ファイルシステム関連機能。
`<fstream>`: ファイル
入出力。
`<ios>`:
入出力基底クラス。
`<iostream>`: 標準
入出力。
`<iosfwd>`:
入出力クラスの前方宣言。
`<iomanip>`:
入出力操作子。
`<istream>`: 入力ストリーム。
`<ostream>`: 出力ストリーム。
`<sstream>`:
文字列ストリーム。
`<strstream>` (非推奨):
文字列ストリーム(sstream推奨)。
`<streambuf>`: ストリームバッファ。
数値処理
`<complex>`:
複素数。
`<numeric>`: 数値計算
アルゴリズム。
`<random>`: 乱数生成。
`<valarray>`: 数値
配列。
言語支援
`<exception>`: 例外処理。
`<initializer_list>` (
C++11): 初期化リスト。
`<limits>`: 数値型の限界。
`<new>`: メモリ割り当て。
`<typeinfo>`: 型情報。
診断
`<stdexcept>`: 標準例外クラス。
`<system_error>`: システムエラー。
スレッド
`<atomic>` (
C++11): アトミック操作。
`<condition_variable>` (
C++11): 条件変数。
`<future>` (
C++11): 非同期処理。
`<mutex>` (
C++11):
ミューテックス。
`<shared_mutex>` (
C++14): 共有
ミューテックス。
`<thread>` (
C++11): スレッド。
C++では、
C言語の標準
ライブラリも利用できます。
C++では、Cの
ヘッダファイルの名前を少し変更して使用します。具体的には、
拡張子 `.h` を取り除き、先頭に `c` を追加します。例えば、`time.h` は `ctime` となります。また、Cのヘッダ内の宣言は `std`
名前空間に置かれるため、関数や型名の前に `std::` を付けて完全修飾する必要があります。
`<cassert>`
`<cctype>`
`<cerrno>`
`<cfenv>` (
C++11)
`<cfloat>`
`<climits>`
`<cmath>`
`<csetjmp>`
`<csignal>`
`<cstdlib>`
`<cstddef>`
`<cstdarg>`
`<cuchar>`
`<ctime>`
`<cstdio>`
`<cstring>`
`<cwchar>`
`<cwctype>`
C++20で追加された新しいヘッダ
C++20では、以下の新しいヘッダが追加されました。
`<barrier>` (
C++20): バリア同期プリミティブを提供。
`<bit>` (
C++20): ビット操作関数群。
`<compare>` (
C++20): 三方比較演算子(`<=>`)の関連機能。
`<concepts>` (
C++20): 基本的なコンセプト
ライブラリ。
`<coroutine>` (
C++20): コルーチンサポート用の型と関数。
`<format>` (
C++20): テキストフォーマット機能。
`<latch>` (
C++20): ラッチ同期プリミティブ。
`<numbers>` (
C++20): 数学定数(π, e など)。
`<ranges>` (
C++20): レンジ
ライブラリ。
`<semaphore>` (
C++20): セマフォ同期プリミティブ。
`<source_location>` (
C++20): ソースコード位置情報。
`<span>` (
C++20): メモリ範囲を参照する型。
`<stop_token>` (
C++20): 非同期操作のキャンセル機能。
`<syncstream>` (
C++20): 同期ストリーム機能。
`<version>` (
C++20): 実装のバージョン情報。
外部リンク
Rogue Wave 標準 C++ ライブラリ・ユーザーズガイド
C++ Standard Library Reference | Microsoft Documentation(英語)
C++ Standard Library reference(英語)
参考文献
* 『
プログラミング言語C++第3版』(1998) ビャーネ・ストロヴストルップ著 長尾高弘訳 アジソンウェスレイパブリッシャーズジャパン ISBN 978-4756118950