C++
[C++] 난수 생성 및 Shuffle
건전한 건전지
2022. 11. 17. 18:04
728x90
반응형
#include <iostream>
#include <random>
#include <functional>
using namespace std;
// 랜덤 숫자 생성을 위한 함수
void genRandomNum(vector <int> &vc) {
// 난수 엔진 mt19937, 괄호 안은 시드 값 지정
mt19937 engine((unsigned int)time(NULL));
// a~b까지 균등한 분포를 가진 숫자를 생성함
// 실수 타입은 uniform_real_distribution 사용
uniform_int_distribution <int> dist(0, 95);
auto gener = bind(dist, engine);
// 10개 생성 후 Vector에 넣기
for (int i = 0; i < 10; i++)
vc.push_back(gener());
}
// 숫자를 랜덤으로 섞어주는 함수
void shuffleNum(vector <int>& vc) {
// time은 같은 시간에 실행되면 항상 똑같은 난수를 발생시키므로 random_device를 통해 예측 불가능한 난수 생성 가능
// 범위 : 0 ~ 2^32-1
random_device rd;
// 인수 rd
mt19937 g(rd());
shuffle(vc.begin(), vc.end(), g);
}
int main() {
vector <int> vc;
genRandomNum(vc);
cout << "Origin : ";
for (auto i : vc)
cout << i << " ";
shuffleNum(vc);
cout << "\nAfter : ";
for (auto i : vc)
cout << i << " ";
}
난수 엔진 mt19937, 괄호 안은 시드 값 지정
mt19937 engine((unsigned int)time(NULL));
a~b까지 균등한 분포를 가진 숫자를 생성함
실수 형은 uniform_real_distribution 사용
uniform_int_distribution dist(a, b);
time은 같은 시간에 실행되면 항상 똑같은 난수를 발생시키므로 random_device를 통해 예측 불가능한 난수 생성 가능
범위 : 0 ~ 2^32-1, 인수를 rd로 줌
random_device rd;
mt19937 g(rd());
728x90
반응형