헤더파일
템플릿- 2 본문
c언어의 랜덤함수는 모든 숫자가 같은 확률로 나오고 16비트지만 c++의 랜덤엔진은 원하는 대로 어떤 부분이 더 많이 나올 수 있는지 정할 수 있고 32비트이다.
지역변수는 스택에 저장된다. 스택은 기본적으로 접시를 조금씩 쌓아서 바로바로 쓸려고 쓰는 것.
스택의 용도는 현재 정보를 잠시 저장하는 용도로만 쓴다.
엄청 큰 자료는 전역변수로 잡아도 되지만 초기화한 전역변수는 실행파일 크기가 커진다. 변수의 자료를 하드디스크에 저장하기 때문이다. 실행파일은 실행중에 메모리에 올라오기때문에 매우 비효율적이다. 전역변수는 데이터 은닉에도 비효율적이지만 실행파일 커지는 문제도 있다.
int n[10000000] -> 102kb
int n[10000000]{333}; -> 47000kb
그래서 큰 자료는 동적할당으로 잡은 자료는 컴파일러가 알아서 파악해서 실행도중 메모리에 잡는다.
int main()
{
int* n = new int[100000];
default_random_engine dre;//32bit 랜덤 엔진.
uniform_int_distribution<int> uid;
dre.seed(time(NULL));
this_thread::sleep_for(3ms);
for (int i=0;i<100000;++i)
n[i] = uid(dre);
auto start = chrono::high_resolution_clock::now();
qsort(n, 100000 , sizeof(int), [](const void* a, const void* b) {
return *(static_cast<const int*>(a)) - *(static_cast<const int*>(b));
});
std::chrono::duration<double> diff = chrono::high_resolution_clock::now() - start;
cout<< "Time : " << diff.count()<<" sec" << endl;
delete[] n;
//Save();
}
시스템엔 시계가 3개있다. 시스템 클럭, 고해상도 시계, 스테디 시계. 대부분은 다 똑같지만 다른 컴퓨터도 있으므로 제일 정확한 고해상도 시계를 쓴다.
default_random_engine dre;
uniform_int_distribution<int> uid(0,5000);
dre.seed(time(NULL));
랜덤엔진 변수를 선언하고 랜덤값의 범위를 지정한다.
시드는 시간값 전달.
처리할 자료는 내 프로그램과 관계없이 존재할 것이다.