Standard Template Library
(*) 連想配列。順序づけされない。unordered_set同様、ハッシュテーブルによる実装が意図されている。
(*) 要素の重複が許されているunoredered_set。
集合。順序付けられている(このためツリーにより実装されるのが通常で、他言語のライブラリによく見られるハッシュテーブルではない)。
(*) 集合。順序づけされない。ハッシュテーブルによる実装が意図されている。
C++のテンプレートはテンプレート引数が違うとそれぞれ全く別の型として扱われ、それぞれ別の機械語コードにコンパイルされてしまう。
以下のようなプログラムをコンパイルすると、std::vector<int>のコードが作成される。
ここへさらに、
というオブジェクトを実体化してコンパイルすると、先とは別にstd::vector<double>のコードも作成され、結果として二つ分の別個のクラスのコードが実行ファイルに含まれることになる。このため最終的に生成されるコードの量が急激に増大しやすく、組み込み向けなど記憶容量に制限のある環境ではSTLに限らずテンプレート全般の使用を禁止している開発現場もある。ただのクラスで実装した場合も事情は同じである。テンプレートを使わずに、int型用にstd::vector<int>と同等のクラスを書き、double型用にstd::vector<double>と同等のクラスも書き、両方のクラスをインスタンス化すれば、同様にコードの増大が起こる。しかしながら、PCのようにメモリやストレージ容量に余裕のある環境に限れば、実行プログラムとして出力されるコード量の増大は微々たるものと言える。