seed_seq::generate
Generuje losowy interwał, z nasion.
template<class RandomAccessIterator>
void generate(
RandomAccessIterator first,
RandomAccessIterator last
) const;
Parametry
first
Iteratora dostępie, adresowania położenie pierwszego elementu w zakresie źródłowym.last
Iterację dostępie adresowania położenie ostatniego elementu w zakresie źródłowym.
Uwagi
Funkcja szablonu inicjuje elementy sekwencji [first, last) (Jeśli sekwencja jest niepusta) następująco:
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;
}
Funkcja xor27 jest zdefiniowana jako:
result_type xor27(result_type val) const
{ // shift and merge
return (val ^ (val >> 27));
}
Wymagania
Nagłówek: <random>
Obszar nazw: std