C++STL解説

コンテナ

コンテナとはその名の通り”入れ物”です。データを入れておくためのクラスですね。
コンテナには次のような分類と種類があります。
それぞれに特徴があり、向いている処理・向いていない処理があります。

この時点で各コンテナの説明が理解できなくても気にしないでください。
これから1つずつ詳細に説明していきます。

要素の要件

コンテナに入れられるオブジェクトは次の決まりを守ったもの出なければなりません。

  1. コピーコンストラクタ又はコピー代入演算子でコピーが可能。
  2. 上記のコピー演算中に例外を投げてはならない。
  3. コピー後、オリジナルとコピーは等値比較で等しくなければならない。

    まず1.ですが、コンテナにオブジェクトが入れられるとき、そのオブジェクトのコピーがコンテナに入れられます。そのためコピーコンストラクタが必要になります。
    また、各コンテナの操作又はアルゴリズムの適応時には要素のコピー代入が行われることがあります。そのためコピー代入演算子が必要になります。

次に2.です。例えばA,Bはそれぞれ10個の要素が入っているコンテナとします。
Aの要素をすべてBにコピーしようとしたとき、4個目までの要素のコピーに成功して5個目の要素のコピー中に例外が投げられてしまうと、Bの4個目まではAのコピー、6個目以降は元のBのままという中途半端な状態になってしまいます。(Bの5個目の要素の状態はコピーのどの段階で例外が発生したかによります。)

最後に3.。オブジェクトのコピー後にオリジナルとコピーが等しくない場合、さまざまなコンテナ操作やアルゴリズムの適応に支障が生じます。
例えばalgorithmヘッダ内のsort関数は通常クイックソートで実装されており、クイックソートでは初めにピボット要素のコピーが行われます。
もしそのときオリジナルとコピーが等しくなければソートはめちゃくちゃになるでしょう。

結構面倒だと思ったでしょうか?でも安心してください。組み込み型(intやdoubleのようなC++に最初から用意されている型)は1〜3をすべて満たします。
自分でクラスを作ってそれをコンテナに入れようとしている人はそのクラスが1〜3の要件を満たすかどうかを確認してください。


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS