random_srand — std::srand

random_srand — std::srand (난수 시드)

std::srandstd::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>을 우선 사용해요.

더 알아보기 (Learn more)

cppreference