2011-10-24 9 views
0

std::setコードを探していました。 insert署名は_Pairib insert(const value_type& _Val)と表示されています。入力パラメータが参照渡しで渡されるのはなぜですか?私はstandardcContainerがその要素をコンテナのメモリにコピーすることを知っています。誰がこれがどのように達成されているか知っていますか?アロケータはどこに画像を入力しますか?どのように要素が格納/挿入されるかを説明する小さなコード/擬似コードは評価されます。コピーがどのように行われているかを理解することに興味があります。STLコンテナ挿入要素

答えて

2

アロケータはテンプレートパラメータです。定義hereを見て:あなたはあなた自身のアロケータを指定しない場合、それは(おそらくnewだろう)、デフォルトのアロケータを取る

template < class Key, class Compare = less<Key>, 
      class Allocator = allocator<Key> > class set; 

パブリックコピーコンストラクタ、デストラクタ、および代入演算子を持つクラスでSTLコンテナを使用できます。 here参照:STLコンテナに挿入

要素が 公共コピーコンストラクタ、デストラクタ公共、及び公共 代入演算子を供給する任意のオブジェクトタイプとすることができます。デストラクタは例外をスローすることはできません。 さらに、setやmapなどの連想型コンテナには、公平比較演算子 が定義されている必要があります。これは、デフォルトではオペレータ<です。 コンテナの操作によっては、公開のデフォルトの コンストラクタとパブリック同値演算子が必要な場合もあります。

したがって、基本的には、クラスに実装されている上記のパブリックメンバー関数を使用してコピーが行われます。

+0

ユーザ定義型のSTLコールコピーコンストラクタと同様に、アロケータによって作成された領域にオブジェクトを作成しますか? – Avinash

+0

@Avinash - はい。 – littleadv

+0

ありがとう、私はこれをC++でどうやってやれるか知っていますか?これを達成するには新しいプレースメントを使う必要がありますか? – Avinash

2

なぜ入力パラメータが参照として渡されるのですか。

2つのコピーが必要です.1つは関数の引数用、もう1つはコンテナノード用です。

ここで、アロケータは画像に表示されます。

コンテナは、通常、要素タイプと他のノードへのポインタなどの他の情報を含むプライベートノードタイプを割り当てて初期化するように、アロケータに要求します。

コピーがどのように行われているかを理解することに興味があります。

プライベートノードタイプは、insertに渡された引数のコピーを保持します。