Share via


seed_seq::generate

genera un intervalo aleatorizado de los gérmenes.

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

Parámetros

  • first
    Un iterador de acceso aleatorio que dirige la posición del primer elemento del intervalo de origen.

  • last
    Un iterador de acceso aleatorio que dirige la posición del último elemento del intervalo de origen.

Comentarios

La función de plantilla inicializa los elementos de la secuencia [first, last) (si la secuencia no está vacío) como sigue:

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 función xor27 se define como:

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

Requisitos

encabezado: <aleatorio>

espacio de nombres: std

Vea también

Referencia

<random>

seed_seq Class