헤더파일

템플릿- 2 본문

C++

템플릿- 2

헤더파일 2018. 3. 19. 15:16

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));


랜덤엔진 변수를 선언하고 랜덤값의 범위를 지정한다.

시드는 시간값 전달.



처리할 자료는 내 프로그램과 관계없이 존재할 것이다.


'C++' 카테고리의 다른 글

스마트 포인터  (0) 2018.04.05
이동  (2) 2018.03.29
템플릿 - 3  (0) 2018.03.22
템플릿  (0) 2018.03.08
다형성, 레퍼런스  (0) 2018.03.05
Comments