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