#include <iostream>
#include <random>
#include <limits>
#include <type_traits>
#include <cfloat>
#define CSTR
using i32 = int;
using u32 = unsigned int;
using f32 = float;
template< typename T >
using DENSITY = typename std::conditional<
std::numeric_limits< T >::is_integer,
std::uniform_int_distribution<>,
std::uniform_real_distribution<> >::type;
template< typename T, typename METHOD = std::mt19937 >
class RNG
{
private:
METHOD method;
DENSITY< T > random;
public:
CSTR RNG()
: random( std::numeric_limits< T >::lowest(),
std::numeric_limits< T >::max() )
{
}
CSTR RNG( u32 range )
: random( 0, range -
( std::numeric_limits< T >::is_integer? 1 : FLT_EPSILON ) )
{
}
CSTR RNG( T from, T to )
: random( from, to )
{
}
void set( T from, T to )
{
random.param( decltype( random.param() ){ from, to } );
}
auto get()
{
return random( method );
}
};
using namespace std;
#define loop( count ) for( int i_ = 0; i_ < count; ++i_ )
int main()
{
{
RNG< i32 > rng( 10 );
loop( 20 )
cout << rng.get() << " ";
cout << endl;
}
{
RNG< i32 > rng( 10 );
loop( 20 )
cout << rng.get() << " ";
cout << endl;
}
{
RNG< f32 > rng( 10 );
loop( 10 )
cout << rng.get() << " ";
cout << endl;
}
return 0;
}
결과 :
8 1 9 8 1 9 9 2 6 3 0 5 2 1 5 9 9 9 9 9 8 1 9 8 1 9 9 2 6 3 0 5 2 1 5 9 9 9 9 9 1.35477 8.35009 9.68868 2.21034 3.08167 5.47221 1.88382 9.92881 9.96461 9.67695
색칠 좀 해주세연.
std::rand 임니다
std::rand 아닙니다.
색칠 매너좀 빼애애애액~
색칠하였습니다.
훨씬 낫군요. ㄳㄳ
안떠요...
시끄러워서 흰색 칠했었음.
헠..
뭔말인지 모르겟네요..
구글링 해야 읽을 수 있을듯
stl::random 이란 건 없는데염
#include <random> 이라고 쓰기도 뭐하잖여.
그렇다고 std::rand 를 쓴것도 아닌데
ㅇㅇ 그러니 std::rand 를 클래싱 해보았다 라고 표현하는게 맞지않것나여
std::rand 를 쓴게 아닌데유?
기본 메르센트위스터, 다른걸 바꿔낄수 있게 만든거임유.
테스트 해보니까 VC++ 에서는 std::rand 랑 메르센트위스터랑 속도 차이가 안남유. 이렇게 쓰면. ( 대신 범위가 계속 바껴야 되면 메르센 트위스터가 느림 )
나중에 시간날때 DENSITY 도 바꿔낄수 있게 수정해야짓.
ㄴ 전혀 무관하죠. std::rand 를 랩핑했다라는 표현으로 와전될 이유도 없고, 구현이야 자유니.
engine 을 바꿔낄 수 없는 std::rand 를 래핑한게 아니므로. 걍 난 이제목이 좋음.
std::rand 는 그냥 펑션이라 Policy 를 바꿀 순 없죠 ㅇㅇ. 그저 "stl::random 을 클래싱 했다" 라고 표현하면 보통 "아, 이사람이 std::rand 를 쓰려고 했는데 오타를 냈구나" 라고 보일거같네욤
히힣.
암튼 코드잘봤어요 ㅎㅎㅎ
오타라기엔 std:: 라고 안하고 stl:: 이라고 했는뎅.
이건 의도된 스코프 일 뿐.
stl.random 이라고 할까 =_= 뭐 엎어치나 매치나.
그래서 더 오타같아 보이네여. 흠 예전에 프갤에 stl::random 이란 펑션을 하나 올리셨었었나여?
싸워라싸워라
아, 혹시 예전에 stl::random 이란 걸 프갤에 공유했었고, 이걸 다시 클래싱했다는 히스토리인가여?
제길 몰라 그냥 딸이나쳐야지
아닝, C++/STL/random 을 클래싱 한거지. 그냥 스코프.
category 일 뿐. 후훗.
아하 이해햇음여
님들왜안싸움나팝콘티겻는데존나
DENSITY 를 enum METHOD 로 파라메터 받아서 바꿔 쓰게 해야겠당. 일단 uniform 과 normal 만 넣어놔야짓.
싸우기엔 사이가 좋음. 히힣.
이쁜사랑하세요
형 우리 뽀뽀할까
키스는 인터넷 키스가 있어요
색칠 ㅜㅜ