random_srand — std::srand
random_srand — std::srand (난수 시드)
std::srand는 std::rand()가 사용하는 의사 난수 생성기를 seed 값으로 시드해요. <cstdlib> 헤더에 있어요.
출처: cppreference
본문
// <cstdlib>
void srand( unsigned seed );
std::rand()를 srand() 호출 전에 쓰면, rand()가 srand(1)로 시드된 것처럼 동작해요.
std::rand()가 같은 시드로 시드될 때마다 같은 값의 시퀀스를 만들어야 해요.
#include <cstdlib>
std::srand(1234); // 시드 설정
int a = std::rand(); // 시드 1234의 첫 난수
std::srand(1234); // 같은 시드 재설정
int b = std::rand(); // a와 같은 값 (재현 가능)
특징
- 재현성 — 같은 시드 → 같은 난수 열. 디버깅·테스트에 유용해요.
unsigned값을 받아요. 보통 현재 시간(std::time(nullptr))이나std::random_device로 시드해요.- 프로그램에서 한 번만 호출하는 것이 일반적이에요.
rand/srand은 암호학적으로 안전하지 않아요.
#include <cstdlib>
#include <ctime>
std::srand(static_cast<unsigned>(std::time(nullptr))); // 시간 기반 시드
int r = std::rand() % 100; // 0~99
현대적 대안
C++11 이후 <random> 헤더의 엔진(std::mt19937)과 std::random_device가 더 나은 품질을 제공해요.
#include <random>
std::mt19937 gen(std::random_device{}()); // 시드
std::uniform_int_distribution<int> d(0, 99);
int r = d(gen);
std::srand/std::rand는 단순한 난수가 필요한 레거시 코드에서 여전히 쓰여요. 새 코드는 <random>을 우선 사용해요.