標準C++ライブラリ

標準C++ライブラリとは



標準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++では、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

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。