C ++標準ライブラリ


C++_Standard_Library

C ++プログラミング言語では、C ++標準ライブラリはクラスと関数のコレクションであり、コア言語とC ++ ISO標準自体の一部で記述されています。

コンテンツ
1 概要
2 実装
2.1 製造中止
2.1.1 Apache C ++標準ライブラリ
2.2 関連項目
3 標準ヘッダー
3.1 全般的 3.2 言語サポート 3.3 コンテナ 3.43.4 イテレータと範囲 3.5 ローカリゼーション 3.6 文字列 3.7 ストリーム、ファイル、および入力/出力 3.8 スレッドサポートライブラリ 3.9 数値ライブラリ 3.10 C標準ライブラリ
4 も参照してください
5 ノート
6 参考文献
7 参考文献
8 外部リンク

概要
C ++標準ライブラリは、いくつかの汎用コンテナ、これらのコンテナを使用および操作するための関数、関数オブジェクト、汎用文字列とストリーム(インタラクティブおよびファイルI / Oを含む)、いくつかの言語機能のサポート、および正方形の検索などの日常的なタスクのための関数を提供します数値のルート。C ++標準ライブラリには、「。h」で終わるISO C標準ライブラリのほとんどのヘッダーも組み込まれていますが、それらの使用は非推奨です。 C ++標準ライブラリの他のヘッダーは「.h」で終わりません。C ++標準ライブラリの機能は、std 名前空間内で宣言されています。
C ++標準ライブラリは、標準テンプレートライブラリ(STL)によって導入された規則に基づいており、ジェネリックプログラミングの研究や、AlexanderStepanovやMengLeeなどのSTLの開発者の影響を受けています。 C ++標準ライブラリとSTLは多くの機能を共有していますが、どちらも他方の厳密なスーパーセットではありません。
C ++標準ライブラリの注目すべき機能は、一般的なアルゴリズムの構文とセマンティクスを指定するだけでなく、それらのパフォーマンスに要件を課すことです。これらのパフォーマンス要件は、よく知られているアルゴリズムに対応していることがよくこのアルゴリズムは、使用する必要はありませんが、期待されています。ほとんどの場合、これには線形時間O(n)または線形時間O(n log n)が必要ですが、安定ソート(インプレースを可能にするため)のための準線形時間O(n log 2 n)などの上限が許可される場合もマージソート)。以前は、ソートは平均してO(n log n)を取るだけで済み、クイックソートを使用できました。これは実際には高速ですが、最悪の場合のパフォーマンスは低くなりますが、イントロソートは、高速の平均パフォーマンスと最適な最悪のパフォーマンスの両方を可能にするために導入されました。ケースの複雑さ、およびC ++ 11の時点で、ソートは最悪の線形性であることが保証されています。その他の場合、選択などの要件は緩いままであり、平均して線形である必要があるだけであり(quickselectのように)、イントロセレクトのように最悪の場合の線形を必要としません。
C ++標準ライブラリは、C ++ ISO標準化の取り組みの一環としてISO標準化が行われ、拡張機能の標準化に関してさらに作業が行われています。

実装
名前
ホームページ ライセンス
最新リリース
GNU C ++標準ライブラリ
libstdc ++ GPLv3 2021年11月15日
LLVM C ++標準ライブラリ
libc ++
LLVM例外を伴うApacheライセンスv2.0
2021年9月30日
NVIDIA C ++標準ライブラリ
libcu ++
LLVM例外を伴うApacheライセンスv2.0
2021年8月9日
Microsoft C ++標準ライブラリ MSVCSTL LLVM例外を伴うApacheライセンスv2.0
2021年12月16日
並列処理と並行性のためのHPXC ++標準ライブラリ HPX Boostソフトウェアライセンス1.0
2021年8月12日
Electronic Arts Standard Template Library EASTL BSD3-条項ライセンス
2021年10月20日
Dinkum C ++ライブラリ
わからない
商業の
わからない
Cray C ++標準ライブラリ
わからない
商業の
わからない

製造中止

Apache C ++標準ライブラリ
ApacheのC ++標準ライブラリには、他のオープンソース実装です。もともとはRogueWave Softwareによって商業的に開発され、後にApache SoftwareFoundationに寄付されました。はしかし、リリースせずに五年以上後に、Apache Software Foundationの会は、このプロジェクトを終了し、それを移動することを決めたApacheの屋根裏。

関連項目
次のライブラリは、C ++標準ライブラリの多くを実装しています。
名前
ホームページ
説明
アブセイリング
Googleが内部で使用するライブラリのオープンソースコレクション
愚か者
Facebookで広く使用されているさまざまなC ++ 14ライブラリ
Bareflankサポートライブラリ
コンパイル時にすべてを実行できるC ++ライブラリ

標準ヘッダー
次のファイルには、C ++標準ライブラリの宣言が含まれています。

全般的 C ++ 17の 新 機能。型消去されたクラスを提供します
std::any。 C ++ 11の 新 機能。クラステンプレートstd::atomic、そのいくつかのテンプレートの特殊化、およびより多くのアトミック操作を提供します
時間などの要素を、提供
std::chrono::duration、
std::chrono::time_pointおよびクロックを。C ++ 20以降
、カレンダー、タイムゾーン、より多くの時計、文字列クロノフォーマットなどの新しい追加が追加されました。 C ++ 20の 新 機能。基本的なライブラリの概念を提供します
標準アルゴリズムで使用するために設計された、
いくつかの関数オブジェクトを提供します
クラステンプレートを含む、C ++での
メモリ管理の
ための機能を提供します
std::unique_ptr。 C ++ 17の 新 機能。実行時に動作が変更される可能性のあるポリモーフィックメモリアロケータを作成するための機能を提供します。 C ++ 11の 新 機能。を提供します
std::scoped_allocator_adaptor。 std::logic_errorと
などの標準の例外クラスが含まれています
。std::runtime_errorどちらもstd::exception。から派生してい
C ++ 11の 新 機能。定義
std::error_code C ++ 17の 新 機能。クラステンプレート提供
std::optional、
オプションのタイプを。 C ++ 23の 新 機能。スタックトレース操作を提供し
C ++ 11およびTR1の 新 機能。クラステンプレートstd::tuple、
タプルを提供します
C ++ 11の 新 機能。タイプを操作するメタプログラミング機能を提供します。 様々なユーティリティを提供する:クラステンプレート
std::pair(二部材の
タプル)、コンパイル時系列、語彙タイプの構築にヘルパーなどの機能整数
std::moveと
std::forwardし、より多くの。std::rel_ops比較演算子を自動的に生成するための名前空間
は、C ++ 20で非推奨になり、
新しいデフォルトの比較演算子が採用されました。 C ++ 17の 新 機能。クラステンプレートstd::variant、

タグ付き共用体タイプを提供します 言語サポート C ++ 20の 新 機能。宇宙船演算子のサポートを提供します
C ++ 20の 新 機能。コルーチンサポートを提供します
標準ライブラリによってスローされるすべての例外の基本クラスを含む、例外処理に
関連するいくつかのタイプと関数を提供します
std::exception。 C ++ 11の 新 機能。イニシャライザリストのサポートを提供します。 std::numeric_limits基本的な数値型のプロパティを記述するために使用される
クラステンプレートを提供します
C ++メモリ管理の基本を構成する
演算子newや
deleteその他の関数および型
を提供します
C ++ 20の 新 機能。などの事前定義されたマクロの代わりに、ソースの場所情報をキャプチャすることを提供します __LINE__。
C ++実行時型情報を操作するための機能を提供します
C ++ 20の 新 機能。C ++標準ライブラリの実装に関する情報を提供します。

コンテナ C ++ 11およびR1の 新
機能。コンテナクラステンプレートstd::array、固定サイズの配列のコンテナを提供します
特殊なコンテナクラスstd::bitset、
ビット配列を提供します
コンテナクラステンプレートstd::deque、
両端キューを提供
します。 C ++ 11およびR1の 新
機能。単一リンクリストstd::forward_listである
コンテナクラステンプレートを提供します コンテナクラステンプレートstd::list、
二重リンクリストを提供します

コンテナクラステンプレートstd::mapと
std::multimap、ソートされた
連想配列および
マルチマップを提供します
コンテナアダプタクラスを提供
std::queue、シングルエンド
キュー、および
std::priority_queue、
プライオリティキューを。 コンテナクラステンプレートstd::setと
std::multiset、ソートされた連想コンテナまたは
セットを提供します
C ++ 20の 新 機能。コンテナアダプタクラステンプレートを提供
std::spanします。これは、連続する範囲を参照する変更可能な非所有ビューです。 コンテナアダプタクラスstd::stack、
スタックを提供し
C ++ 11およびR1の 新
機能。コンテナクラステンプレートstd::unordered_mapと
std::unordered_multimap、
ハッシュテーブルを提供します
C ++ 11およびR1の 新
機能。コンテナクラステンプレートstd::unordered_setとを
提供します
std::unordered_multiset。 コンテナクラステンプレートstd::vector、

動的配列を提供します イテレータと範囲 多くのコンテナアルゴリズムの定義を提供します
並列化されたアルゴリズムの実行ポリシーを提供します
イテレータ
を操作するためのクラスとテンプレートを提供し
C ++ 20の

機能。範囲機能と遅延評価されたアダプターを提供します ローカリゼーション クラスを定義し、ロケールに固有の情報をカプセル化して操作する関数を宣言し

さまざまな文字エンコードのコード変換ファセットを提供します。このヘッダーは、C ++ 17以降非推奨になりました 文字列 C ++ 17の 新 機能。整数および浮動小数点から/へのロケールに依存しない、割り当てられない、スローされない文字列変換ユーティリティを提供します。 C ++ 20の 新 機能。を含む文字列をフォーマットする最新の方法を提供します
std::format。 C ++標準の文字列クラスとテンプレートを提供します
C ++ 17の 新 機能。クラステンプレートstd::basic_string_view、任意の文字列に対する不変の非所有ビューを提供します
C ++ 11の

機能。正規表現を使用して文字列を照合するためのユーティリティを提供します ストリーム、ファイル、および入力/出力 C ++ 17の 新 機能。ファイルシステム操作とそのコンポーネントのための機能を提供します
ファイルベースの入出力のための機能を提供します。fstreamを参照して などのフォーマット出力を操作する機能、提供
ベース整数をフォーマットするときに使用され、
精度の
浮動小数点値。 iostreamの操作の基本となるいくつかのタイプと機能を提供します。 いくつかのI / O関連のクラステンプレートの前方宣言を
提供します
C ++の入力と出力の基本を提供します。iostreamを参照してください
std::istream入力用のその他のサポートクラスを
提供します
std::ostream出力用のその他のサポートクラスを
提供します
C ++ 23の 新 機能。std::spanstreamおよびその他の固定文字バッファI / Oストリームを提供します
std::stringstream文字列操作のためのその他のサポートクラスを
提供します
外部ファイルや文字列など、特定のタイプの文字シーケンスとの間で読み取りおよび書き込み機能を提供します。 C ++ 20の

機能。std::osyncstream同期された出力ストリームのクラスとその他のサポートクラスを提供します スレッドサポートライブラリ C ++ 20の 新 機能。std::barrier再利用可能なスレッドバリアを提供します
C ++ 11の 新 機能。32.6-1では、条件変数は、他のスレッドから何らかの条件が満たされたことが通知されるまで、またはシステム時刻に達するまで、スレッドをブロックするために使用される同期プリミティブを提供します。 C ++ 11の 新 機能。32.9.1-1では、このセクションでは、C ++プログラムが、同じスレッドまたは別のスレッドで実行された関数からの結果(値または例外)を1つのスレッドで取得するために使用できるコンポーネントについて説明します。 C ++ 20の 新 機能。std::latch使い捨てのスレッドバリアを提供します
C ++ 11の 新 機能。32.5-1では、このセクションは相互排除のメカニズムを提供します:ミューテックス、ロック、および1回の呼び出し。 C ++ 14の 新 機能。共有相互排除の機能を提供します。 C ++ 20の 新 機能。非負のリソース数をモデル化するセマフォを提供します
C ++ 20の 新 機能。32.3.1-1では、このセクションでは、通常、結果が不要になったために、操作がタイムリーに実行を停止するように非同期的に要求するために使用できるコンポーネントについて説明します。このような要求は停止要求と呼ばれます。 C ++ 11の 新 機能。スレッドを操作するためのクラスと名前空間を提供します。

数値ライブラリ
C ++プログラムが半数値演算を実行するために使用する可能性のあるコンポーネント。 C ++ 20の 新 機能。ビット操作機能を提供します。 クラステンプレートstd::complex、および複素数を表現および操作するための多数の関数を定義し
C ++ 20の 新 機能。名前空間で定義された数学定数を提供します
std::numbers。 C ++ 11の 新 機能。(疑似)乱数と分布を生成するための機能。 C ++ 11の 新 機能。クラステンプレートに基づくコンパイル時の有理演算を提供します。 定義5クラステンプレート(std::valarray、
std::slice_array、
std::gslice_array、
std::mask_array、および
std::indirect_array)、二つのクラス( std::sliceと
std::gslice)、及び表し、値の配列を操作するための関連機能テンプレートの一連。 一般化された数値演算。

C標準ライブラリ
C標準ライブラリ
C標準ライブラリの各ヘッダーは、.hを削除し、先頭に「c」を追加することで生成された、異なる名前でC ++標準ライブラリに含まれています。たとえば、「time.h」は「ctime」になります。これらのヘッダーと従来のC標準ライブラリヘッダーの唯一の違いは、可能な場合は関数をstd::名前空間に配置する必要があることです。ISO Cでは、標準ライブラリの関数はマクロで実装できますが、ISO C ++では許可され

も参照してください
Boost(C ++ライブラリ)
CPOSIXライブラリ
C標準ライブラリ
標準ライブラリ
C ++テクニカルレポート1

ノート

参考文献
^ ISO / IEC 14882:2003(E)プログラミング言語— C ++ §17-27 ^ ISO / IEC 14882:2003(E)プログラミング言語— C ++ §D.5 ^ Bjarne Stroustrup(1994)。C ++の設計と進化§8.5。アディソンウェスリー。ISBN 0-201-54330-3。
^ アレクサンダーステパノフ、メンリー(1994年8月1日)。「標準テンプレートライブラリ」。HP研究所。
^ 「遺伝的アルゴリズム」、デビッド・マッサー ^ “std :: nth_element”。cppreference.com 。
^ 「JTC1 / SC22 / WG21-C ++標準委員会」。ISO / IEC 。
^ Apache C ++標準ライブラリ ^ ブレットポーター
「ApacheC ++標準ライブラリと屋根裏部屋」。stdcxx-devメーリングリスト。
^ Filipek、Bartlomiej。「多形アロケータ、std :: vectorの成長とハッキング」。
^ 「ワーキングドラフト、プログラミング言語C ++の標準」(PDF)。open-std.org。ISO / IEC。p。492 。

参考文献
Stroustrup、Bjarne(2013)。C ++プログラミング言語。アディソン-ウェスリー。ISBN 978-0321563842。
Josuttis、ニコライ(2012)。C ++標準ライブラリ-チュートリアルとリファレンス。アディソン-ウェスリー。ISBN 978-0-321-62321-8。
ファンウェールト、ピーター; グレゴワール、マーク
C ++標準ライブラリクイックリファレンス。押してISBN 978-1484218754。

外部リンク
C ++標準ライブラリリファレンス
Microsoft C ++標準ライブラリリファレンス
Rogue Wave SourcePro C ++ドキュメント
Apache C ++標準ライブラリWiki、2014年5月15日廃止(Rogue Wave C ++標準ライブラリ4.1.0に基づく)
STLport C ++標準ライブラリのドキュメント
GNU C ++ライブラリのオンラインドキュメント
LLVM / Clang C ++標準ライブラリのドキュメント