C++ STL 11 Решение:Использование станд :: преобразования с станд :: normal_distribution и станд :: затруднительное
auto distribution = std::bind(std::normal_distribution<double>{mean, stddev},
std::mt19937(std::random_device{}())
);
std::transform(data.begin(), data.end(), data.begin(),
std::bind(std::plus<double>(), std::placeholders::_1, distribution()));
Easy диапазон на основе цикла:
for (auto& d : data) {
d += distribution();
}
Мой СТЛ решение Безразлично» t, поскольку он всегда принимает первое число, которое оно генерирует из распределения. Я попытался с помощью заполнителя в качестве третьего параметра, но ничего не изменил. Все мои данные увеличиваются на тот же номер, который я не хочу. Я хочу, чтобы такое же поведение, как цикл на основе диапазона.
Это что-то возможно?
возможно использовать lambdas вместо – jaggedSpire
'distribution()' будет вызываться только один раз в вашем первом фрагменте кода, и результат будет привязан к 'plus'. Однако вы хотите, чтобы 'distribution' вызывал для каждого элемента. Вы должны использовать другую семантику. Обратите внимание, что лямбда сделает это легче, например. '[& distribution] (double x) {return x + = distribution(); } '. – Zeta
@ Зета, вот что я подумал. использование лямбда кажется единственным путем? –