【发布时间】:2014-02-23 19:05:27
【问题描述】:
我正在使用 Visual Studio 2013(调试模式),它没有 std::discrete_distribution 的基于迭代器的构造函数,因此我使用了一种解决方法。但是,使用此解决方法时,如果最后一个元素不大于 weights 中的第一个元素,则会产生运行时错误。
使用初始化列表时不会产生此错误。
例子:
#include <iostream>
#include <random>
#include <vector>
int main(){
std::discrete_distribution<> dist1 = { 10.f,11.f,5.f };
std::cout << "!" << std::endl;
std::vector<float> weights = { 10.f, 11.f, 5.f};
std::size_t i(0);
std::discrete_distribution<> dist2(weights.size(), weights.front(), weights.back(),
[&weights, &i](double){
auto w = weights[i];
++i;
return w;
});
std::cout << "!!" << std::endl;
return 0;
}
输出:
!
discrete_distribution 的范围无效
在weights 的末尾添加任何大于 10 的数字将停止运行时错误的发生。
为什么会这样?
【问题讨论】:
标签: c++ algorithm math random std