Как инициализировать boost :: random :: discrete_distribution с помощью double []; - PullRequest
3 голосов
/ 30 марта 2012

Я хотел бы инициализировать boost :: random :: discrete_distribution с двойным [] следующим образом:

boost::random::discrete_distribution<>* distribution(double* _distr)
{
    return new boost::random::discrete_distribution<>(_distr);
}

Я знаю, что могу использовать таблицу векторного или статического размера, но есть ли способ преодолеть этобез переписывания моего _distr?

1 Ответ

1 голос
/ 30 марта 2012

discrete_distribution<> не может принимать простой аргумент double*, потому что он не мог бы узнать, как долго массив находится.

Вместо этого требуется диапазон итераторов, но вам нужно указать количество элементов в вашем массиве:

boost::random::discrete_distribution<>* distribution(double const* distr,
                                                     std::ptrdiff_t count)
{
    return new boost::random::discrete_distribution<>(distr, distr + count);
}

Как обычно, это совершенно ясно указано в документации .

...