私はそのようなC++コードを持っています(なぜそんなに醜いのか聞かないでください;)-コードのさらに別の部分のために、それは本当に意味があると信じなければなりません):
IntSet temp;
SuperSet superSet;
for (uint i = 0; i < noItems; i++) {
temp.insert(i);
superSet.insert(temp);
temp.clear();
}
noItems
これは、整数のセット ( IntSet
、それぞれが 1 つの整数値を含む)を準備し 、それを他のセット ( SuperSet
) に挿入することを目的としています。両方のセットは次のように定義されます。
typedef unsigned int DataType;
typedef std::set<DataType> IntSet;
typedef std::set<IntSet> SuperSet;
temp
私にとって、このコードは意図したとおりに動作しないはずです。なぜなら、に挿入した直後に をsuperSet
クリアしていて、 がその引数として参照を取得しているtemp
ことがわかったからです: ( http://www.cplusplus.com/reference/stl/セット/挿入/ )insert
pair<iterator,bool> insert ( const value_type& x );
したがって、上記のコードの結果として、SuperSet
クリアされた のみを含むが得られるはずですIntSet
。しかし、「残念ながら」このコードは機能します-すべてIntSet
の は適切な値で満たされています...だから私の質問は-STLのセットからの挿入メソッドは実際にその本体で何をしますか? 参照によって渡されたオブジェクトを単にコピーするだけですか? そして、オブジェクト型またはプリミティブ型を渡す間のこのメソッドの動作の違いは何ですか?
回答ありがとうございます。