2009-11-06 3 views
2

이 내가 어떤 일에 자세히 설명해야한다는 일부 C++ 코드의 발췌 한 것입니다 :C++ : & rand는 정확히 무엇을 수행합니까?

std::vector<int> vct(8, 5); 

std::generate(vct.begin(), vct.end(), &rand); 

std::copy(vct.rbegin(), vct.rend(), 
    std::ostream_iterator<int>(std::cout, "\n")); 

나는 그 작은 신비 & 랜드를 제외하고 그것에 대해 모든 것을 이해하고 생각합니다. 그것은 정확히 무엇을합니까? 분명히 어떤 종류의 의사 랜덤 숫자를 생성하지만, 항상 동일하게 유지됩니다. & 랜드는 어디에서 왔습니까? 그것은 어떤 종류의 표현인가? 그것이 생산하는 가치는 어디서 오는 것입니까? 나는 조금 혼란 스럽다 ...

도 코드에서 "rand"라는 단어의 다른 어커런스를 찾을 수 없었고 임의의 숫자와 관련이있는 코드를 볼 수 없었습니다. 왜냐하면 C++에서의 (매우 제한적인) 경험에 의하면, 단지 선언되거나 포함되지 않아도되는 일이 거의 없을 뿐이라는 사실이 나에게 이상하게 보였습니다.

도와 주셔서 감사합니다.

답변

13

&rand&rand() 기능의 주소를 반환합니다. generate()에 함수 포인터를 전달하므로 generate()rand()을 호출하여 임의의 숫자를 생성 할 수 있습니다.

2

rand은 cstdlib에 정의되어 있습니다. 동일한 "시드"를 사용하기 때문에 동일한 가치를 얻게됩니다. 그건 의도적으로입니다.

다른 시드를 원하면 srand (예 : srand(time(NULL));)으로 전화하십시오.

+0

'rand'가 아닌'rnd'입니다. –

+0

Ug, 오타가 날 죽음이 될 것입니다. Ken 께 감사드립니다. –

+0

당신이나 켄의 대답이 더 나은지는 Hm이 결정할 수 없지만 그 조합은 내가 필요한 것입니다. 감사! –

0

rand()는 표준 C 라이브러리의 일부인 함수입니다. 서명은 다음과 같습니다.

int rand(void); 

stdlib.h에 정의되어 있습니다. 대부분의 경우, std C++ 라이브러리의 구현은 또는을 포함 할 때 헤더 파일을 포함합니다.

0

&rand은 "rand의 주소"를 의미합니다. rand은 의사 난수를 반환하는 표준 라이브러리의 함수입니다. 당신이하고있는 일은이 함수의 주소를 알고리즘에 전달하는 것입니다. 그런 다음 그들은 작업 과정에서이 기능을 호출합니다.

지금까지 자신이가는 rand으로, 어떤 점잖은 C++ 문서는 당신이 관찰하고있는 방식으로 작동하는 이유 ... 당신을 말할 것이다 (그리고 다른 답변 여기에서뿐만 아니라)

5

랜드()가있다 함수는 0과 정의 사이에 가짜 난수를 생성하는 C 표준 라이브러리에서 RAND_MAX을 정의합니다. C++을 사용하는 경우 머리글 <cstdlib> (<stdlib.h> 대신)을 포함하십시오 srand()을 사용하면 시드를 설정할 수 있습니다. 애플리케이션을 실행할 때마다 새로운 시드가 필요하면 time()의 값으로 시드 할 수 있습니다. 2001

POSIX 표준()는 및 부터 srand()랜드의 일례-구현을 갖는다. 내 설명서 페이지에서 복사하여 붙여 넣었습니다.당신의 C 표준 라이브러리에 의해 사용되는 구현은 다음과 다를 수 있습니다 또한

static unsigned long next = 1; /* RAND_MAX assumed to be 32767 */ int myrand(void) { next = next * 1103515245 + 12345; return((unsigned)(next/65536) % 32768); } void mysrand(unsigned seed) { next = seed; } 

& 함수에서 주소를합니다. 컴파일러는이 부분에서 다소 모호합니다. 일부는 함수 포인터에서 주소를 원할 때이 연산자를 사용해야합니다. 다른 사람들은 그렇지 않습니다. 은 C++ 표준 라이브러리의 <algorithm> 헤더의 함수입니다. 그것은 함수 및/또는 펑터 객체를 필요로하며이를 사용하여 지정한 반복자에 대한 값을 컨테이너에 생성합니다.

관련 문제