seed_seq::generate

Génère une plage randomisé des graines.

template<class RandomAccessIterator>
    void generate(
        RandomAccessIterator first,
        RandomAccessIterator last
    ) const;

Paramètres

  • first
    Un itérateur d'accès aléatoire adressant la position du premier élément de la plage source.

  • last
    Un itérateur d'accès aléatoire adressant la position du dernier élément dans la plage source.

Notes

La fonction de modèle initialise les éléments de la séquence [first, last) (si la séquence est pas vide) comme suit :

const size_t s = vec.size();
const size_t n = last - first;
const size_t t = 623 <= n ? 11 : 68 <= n ? 7
    : 39 <= n ? 5 : 7 <= n ? 3 : (n - 1) / 2;
const size_t p = (n - t) / 2;
const size_t q = p + t;
const size_t m = n <= s ? s + 1 : n;
size_t k;

for (k = 0; k < n; ++k)
    first[k] = 0x8b8b8b8b;

for (k = 0; k < m; ++k)
    {    // scramble and add any vector contribution
    result_type r1 = 1664525
        * xor27(first[k % n] ^ first[(k + p) % n] ^ first[(k - 1) % n]);
    result_type r2 = r1
        + (k == 0 ? s : k <= s ? k % n + vec[k - 1] : k % n);

    first[(k + p) % n] += r1;
    first[(k + q) % n] += r2;
    first[k] = r2;
    }

for (; k < m + n; ++k)
    {    // rescramble
    result_type r3 = 1566083941
        * xor27(first[k % n] + first[(k + p) % n] + first[(k - 1) % n]);
    result_type r4 = r3 - k % n;

    first[(k + p) % n] ^= r3;
    first[(k + q) % n] ^= r4;
    first[k] = r4;
    }

La fonction xor27 est définie comme suit :

result_type xor27(result_type val) const
    {    // shift and merge
    return (val ^ (val >> 27));
    }

Configuration requise

en-tête : <random>

l'espace de noms : DST

Voir aussi

Référence

<random>

seed_seq Class