小编Nic*_*ick的帖子

为什么uniform_int_distribution <uintmax_t>适用于62位数字但不适用于63位或64位数字?

我很难理解为什么这个代码,尝试<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)

c++ c++11 libc++

20
推荐指数
1
解决办法
964
查看次数

是否反复为随机数生成器播种合理的散列函数?

我希望生成大量的随机数据,这些数据对于给定的数据是可重现的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 c++ cryptography

7
推荐指数
1
解决办法
1525
查看次数

C++中的并行赋值

有没有办法在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中一样.

c++

6
推荐指数
1
解决办法
3269
查看次数

"预期;之前......"用模板函数打印std :: vector <Whatever>

我正在尝试为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'

我不确定是什么导致这种情况,但我怀疑我是在滥用模板.任何帮助,将不胜感激!

c++ templates

2
推荐指数
1
解决办法
1962
查看次数

标签 统计

c++ ×4

c ×1

c++11 ×1

cryptography ×1

libc++ ×1

templates ×1