Pat*_*ity 2 c++ random iterator stl function-pointers
这是一些c ++代码的摘录,我将在几天内详细解释:
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"));
Run Code Online (Sandbox Code Playgroud)
我想我理解它的一切,除了那个微小的神秘和兰德.究竟是做什么的?我的意思是它显然产生某种伪随机数,但它们总是保持不变.&rand来自哪里?它是什么样的表达方式?它产生的价值来自哪里?我有点困惑......
此外,我既没有在代码中找到任何其他出现的"rand"一词,也没有看到任何可能与随机数有关的代码.这让我很奇怪,因为我(非常有限)的c ++经验表明,只有很少的东西可以简单地工作,而不必事先声明或包含.
谢谢你帮忙!
小智 5
rand()是来自C标准库的函数,它生成0和定义之间的伪随机数RAND_MAX.如果您使用C++,请包含<cstdlib>要使用它的标头(而不是<stdlib.h>)srand()允许您设置种子.如果每次运行应用程序时都需要新的种子,可以使用time()中的值进行种子设定.
2001年的POSIX标准有一个rand()和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;
}
Run Code Online (Sandbox Code Playgroud)
此外,&取得函数的地址.编译器在这方面有点含糊不清.当您需要来自函数指针的地址时,有些需要使用此运算符; 别人不这样做.generate是<algorithm>来自C++标准库的头文件中的函数.它接受函数和/或函数对象,并使用它为您指定的迭代器生成容器的值.
| 归档时间: |
|
| 查看次数: |
588 次 |
| 最近记录: |