seed_seq::generate
Generuje náhodného intervalu ze semen.
template<class RandomAccessIterator>
void generate(
RandomAccessIterator first,
RandomAccessIterator last
) const;
Parametry
first
Random access iterace, který adresování pozici první prvek ve zdrojové oblasti.last
Random access iterace adresování poslední prvek pozice ve zdrojové oblasti.
Poznámky
Funkce šablony inicializuje prvky sekvence [first, last) (pokud posloupnost je prázdný) takto:
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;
}
Funkce xor27 je definován jako:
result_type xor27(result_type val) const
{ // shift and merge
return (val ^ (val >> 27));
}
Požadavky
Záhlaví: <random>
Obor názvů: std