std::set
コードを探していました。 insert
署名は_Pairib insert(const value_type& _Val)
と表示されています。入力パラメータが参照渡しで渡されるのはなぜですか?私はstandardcContainerがその要素をコンテナのメモリにコピーすることを知っています。誰がこれがどのように達成されているか知っていますか?アロケータはどこに画像を入力しますか?どのように要素が格納/挿入されるかを説明する小さなコード/擬似コードは評価されます。コピーがどのように行われているかを理解することに興味があります。STLコンテナ挿入要素
0
A
答えて
2
アロケータはテンプレートパラメータです。定義hereを見て:あなたはあなた自身のアロケータを指定しない場合、それは(おそらくnew
だろう)、デフォルトのアロケータを取る
template < class Key, class Compare = less<Key>,
class Allocator = allocator<Key> > class set;
。
パブリックコピーコンストラクタ、デストラクタ、および代入演算子を持つクラスでSTLコンテナを使用できます。 here参照:STLコンテナに挿入
要素が 公共コピーコンストラクタ、デストラクタ公共、及び公共 代入演算子を供給する任意のオブジェクトタイプとすることができます。デストラクタは例外をスローすることはできません。 さらに、setやmapなどの連想型コンテナには、公平比較演算子 が定義されている必要があります。これは、デフォルトではオペレータ<です。 コンテナの操作によっては、公開のデフォルトの コンストラクタとパブリック同値演算子が必要な場合もあります。
したがって、基本的には、クラスに実装されている上記のパブリックメンバー関数を使用してコピーが行われます。
2
なぜ入力パラメータが参照として渡されるのですか。
2つのコピーが必要です.1つは関数の引数用、もう1つはコンテナノード用です。
ここで、アロケータは画像に表示されます。
コンテナは、通常、要素タイプと他のノードへのポインタなどの他の情報を含むプライベートノードタイプを割り当てて初期化するように、アロケータに要求します。
コピーがどのように行われているかを理解することに興味があります。
プライベートノードタイプは、insert
に渡された引数のコピーを保持します。
関連する問題
- 1. 挿入要素D3js
- 2. 挿入要素が
- 3. 挿入要素DoubleLinked
- 4. 挿入要素PDO結果配列
ユーザ定義型のSTLコールコピーコンストラクタと同様に、アロケータによって作成された領域にオブジェクトを作成しますか? – Avinash
@Avinash - はい。 – littleadv
ありがとう、私はこれをC++でどうやってやれるか知っていますか?これを達成するには新しいプレースメントを使う必要がありますか? – Avinash