我很难理解为什么这个代码,尝试<random>在C++ 11中使用新的标头,正确地生成随机数[0, 2**62 - 1]而不是[0, 2**63 - 1]或[0, 2**64 - 1].
#include <iostream>
#include <stdint.h>
#include <random>
#include <functional>
#include <ctime>
static std::mt19937 engine; // Mersenne twister MT19937
void print_n_random_bits (unsigned int n);
int main (void) {
engine.seed(time(0));
print_n_random_bits(64);
print_n_random_bits(63);
print_n_random_bits(62);
return 0;
}
void print_n_random_bits (unsigned int n)
{
uintmax_t max;
if (n == 8 * sizeof(uintmax_t)) {
max = 0;
} else {
max = 1;
max <<= n;
} …Run Code Online (Sandbox Code Playgroud) 我希望生成大量的随机数据,这些数据对于给定的数据是可重现的key,包括一个数字列表:
[a, b, c, d, e, ...]
Run Code Online (Sandbox Code Playgroud)
在下面的一个很好的或合理的方式来获得一个RNG进入一种状态,以生成随机数据,以这样的方式,对于每个n元组[a, b, c, ..., n],该数据是不相关的输出为"相邻" n元组[a+1, b, c, ..., n],[a, b+1, c, ..., n]等等.
srand(a);
srand(rand() * b);
srand(rand() * c);
...
srand(rand() * n);
# generate random data:
for (int i=0; i < 100; +i)
printf("%d", rand());
Run Code Online (Sandbox Code Playgroud)
我认为这个问题归结为以下几点:rand_hash2元组是一个很好的哈希函数(a, b)吗?
int rand_hash(int a, int b) {
srand(a);
srand(rand() * b);
return rand();
}
Run Code Online (Sandbox Code Playgroud)
注意:我不想暗示这一点,srand并且rand是RNG的任何特定实现.假设为了论证我们正在使用一个好的Mersenne Twister代码.
编辑:如果不清楚,通过"合理的哈希函数"我的意思是以下.在2元组的受限制的情况下 …
有没有办法在C++中进行并行赋值?目前,以下编译(有警告)
#include <iostream>
int main() {
int a = 4;
int b = 5;
a, b = b, a;
std::cout << "a: " << a << endl
<< "b: " << b << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和打印:
a: 4
b: 5
Run Code Online (Sandbox Code Playgroud)
我想要它打印...如果不明显,是:
a: 5
b: 4
Run Code Online (Sandbox Code Playgroud)
就像在ruby或python中一样.
我正在尝试为std :: vector创建一个漂亮的打印机......双打,我自己的自定义类......任何有...的东西friend std::ostream& operator<<.
但是,在尝试编译以下函数时:
template <typename T>
std::ostream& operator<<(std::ostream& os, std::vector<T> const& list) {
std::vector<T>::const_iterator i = list.begin();
if (i == list.end()) {
os << "[ ]";
return os;
}
os << "[ " << *i << "\n";
++i;
for (; i != list.end(); ++i) {
os << ", " << *i << "\n";
}
os << "]";
return os;
}
Run Code Online (Sandbox Code Playgroud)
第三行给出了编译错误, error: expected ';' before 'i'
我不确定是什么导致这种情况,但我怀疑我是在滥用模板.任何帮助,将不胜感激!