클래스 생성자에 전달 된 데이터를 사용하여 std::discrete_distribution
개체를 만들려고합니다. 정적 데이터를 사용하여이를 만드는 방법을 알고 있지만 변수 데이터를 사용하는 방법을 알지 못합니다 (깔끔하게). 내가 지금 가지고있는 것은 "일"하지만 고통 스럽다. 이 작업을 수행하는 데 더 적합한 방법이 있습니까?변수 데이터에서 std :: initializer_list를 만드는 방법
distInit = { distArray[0], ... };
라인이 문제입니다.
#include <iostream>
#include <iomanip>
#include <initializer_list>
#include <map>
#include <random>
class Die {
private:
int loadSide;
double loadAmount;
std::mt19937 generator;
std::discrete_distribution<> distribution;
std::initializer_list<double> distInit;
std::array<double, 7> distArray;
public:
Die(int loadSide, double loadAmount) : loadSide(loadSide), loadAmount(loadAmount) {
distArray.fill(1);
distArray[0] = 0;
distArray[this->loadSide] = this->loadAmount;
distInit = { distArray[0], distArray[1], distArray[2], distArray[3], distArray[4], distArray[5], distArray[6] };
distribution.param(distInit);
};
int roll() {
return distribution(generator);
};
};
const int ROUNDS = 10000;
int main() {
Die* die = new Die(5, 20);
std::map<int, int> m;
for(int n=0; n < ROUNDS; n++) {
m[die->roll()]++;
}
for(auto p : m) {
std::cout << p.first << " generated " << std::setiosflags(std::ios::fixed) << std::setprecision(2) << (float) p.second/ROUNDS << " times\n";
}
}
올바른 질문을하지 않을 수도 있습니다. 사전에 사과드립니다. 이것은 내가이 주제에 대해 (분명히) 관련 히트를 찾을 수 없다는 것에 놀랐 기 때문에 강한 가능성이 있습니다.
제 컴파일러는 g++-mp-4.8 (MacPorts gcc48 4.8-20130411_0) 4.8.1 20130411 (prerelease)
명령 줄 /opt/local/bin/g++-mp-4.8 -std=c++11 test.cpp -o test
한숨 ... 나는 심지어 생성자를 보지도 못했고 그것이 도움이되지는 않았다. 나는 유니폼 초기화를보고 그것을 이해해야 할 것이다. (C++을 사용한 이후로 길었었다.) 나는 makeDistribution이'std :: discrete_distribution' 타입을 반환하는 것을 이해하지 못합니다. 더 많은 연구. 도와 주셔서 감사합니다. – Rob