小编Wie*_*zba的帖子

std :: piecewise_linear_distribution不能在VS2012下运行?

我决定<random>更好地了解c ++ 11 ,所以我编写了这样的代码:

std::mt19937 gen(10);
std::piecewise_linear_distribution<> d(Range.begin(), Range.end(),
                                       RangeValues.begin());

std::map<int, unsigned int> hist;
for (int n = 0; ++n != iterations;)
    ++hist[std::round(d(gen))];

for (auto p : hist)
   std::cout << std::setw(2) << p.first << ": "
             << std::string(p.second/(iterations/200), '*') << '\n';
Run Code Online (Sandbox Code Playgroud)

由于某些原因std::random_device似乎不适用于Coliru,所以我输入了一个const样本种子.我认为,它是UB,因此IIRC它主要依赖于硬件,这就是为什么Coliru不支持它(如果我错了,请纠正我).但在Ideone上,它确实有效.

然后我移植它在VS2012上运行,唯一的区别是自己的实现std::round:

return number < 0.0 ? std::ceil(number - 0.5) : std::floor(number + 0.5);
Run Code Online (Sandbox Code Playgroud)

它在Coliru上完全正确,但是当我在VS2012上编译并运行它时,输出是错误的.

知道如何纠正这个问题,更重要的是,为什么会发生这种情况?我做了一些迟钝的事情,还是VS2012不是聪明人?

c++ random visual-c++ c++11 visual-studio-2012

11
推荐指数
1
解决办法
315
查看次数

标签 统计

c++ ×1

c++11 ×1

random ×1

visual-c++ ×1

visual-studio-2012 ×1