4

ヘッダー ファイル<random>により、シード シーケンスの内部シーケンスを初期化できます。クラスのオブジェクトはseed_seq、複数の方法で構築できます。方法の 1 つ、具体的にはどの C++ 手法が使用されているかについて興味があります。

私はここのウェブサイトを見ています: http://www.cplusplus.com/reference/std/random/seed_seq/seed_seq/

例のセクションには、次の行があります。

std::seed_seq seed2 = {102,406,7892};

ここで正確に何が起こっているのですか?クラスオブジェクトが配列に割り当てられているようです。私はイニシャライザ リスト コンストラクト、コピー代入コンストラクタを見てきましたが、正確に何が起こっているのかまだ混乱しています。

私は理解std::seed_seq seed3 (foo.begin(),foo.end());してstd::seed_seq seed1;います。最初のコード スニペット ( ) は、引数およびを使用してコンストラクターをseed3呼び出しています。2 番目のコード スニペット ( ) は、既定のコンストラクターを使用して構築されています。seed_seqfoo.begin()foo.end()seed1

4

1 に答える 1

5

あなたはほとんど自分で答えを出していたので、あなたの質問を完全に理解したかどうかはわかりません. のようなものを使用する{102,406,7892}と、初期化リストです。のような署名を持つコンストラクター メソッド (または実際には任意のメソッド) は、MyClass::MyClass(std::initializer_list<int> args)これを取ることができます。

begin()通常の反復子メソッドとを使用して反復処理できますend()。基本的に、「通常の」または(そしてそれを呼び出し続ける)または配列をインスタンス化することなく、コードで任意の長さのリストを渡す便利な方法です。std::liststd::vectorpush_back()

おまけとして、イニシャライザ リストを使用して標準コンテナを構築することもできますstd::vector<std::string> vec {"hello", "world"}。これにより、initializer_list を使用して呼び出すことができる関数の引数の型として、標準コンテナーを使用できます。

于 2012-08-23T18:02:18.147 に答える