我只是想知道在程序开始时只能将随机数生成器播种一次是否足够.我编写使用随机数的函数.我从不在函数中使用rand()生成器,而是在主条目上调用srand().例如,我的程序可能如下所示:
void func1()
{
std::cout << "This is func1 " << std::rand() << std::endl;
}
void func2()
{
std::cout << "This is func2 " << std::rand() << std::endl;
}
int main()
{
std::srand(std::time(NULL));
func1();
func2();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
通过这样做,我可以轻松地从主条目关闭播种.它在调试程序时很有用 - 每次运行程序时结果都保持不变,没有播种.有时,如果由于某个随机数而出现问题,如果要生成一组不同的随机数,它可能会消失,所以我更喜欢这种简单的机制来关闭播种.
但是,我注意到在C++ 11的新随机效用集中,随机数生成器必须在使用之前进行实例化.(例如default_random_engine).每次发电机必须单独播种.我想知道是否真的鼓励在需要新发电机时重新安装发电机.我知道我可以像以前一样创建一个全局随机生成器并只播种一次,但我真的不喜欢使用全局变量的想法.否则,如果我创建一个本地随机数生成器,我就会失去全局关闭种子进行调试或其他目的的能力.
我很高兴能够学习C++ 11中的新功能,但有时它会让人感到非常困惑.如果我对新的随机发生器有任何问题,有人能告诉我吗?或者什么可能是C++ 11中的最佳实践?
由于Apple不支持GCC 4.6或GCC 4.7,我刚刚切换到MacPorts的GCC 4.6/4.7版本.但是,我在"通用"架构中构建代码时遇到了问题.
传统上,我会g++ -arch i386 -arch x86_64 ...为至少i386/x86_64架构编译我的二进制文件.我做了一些搜索,并意识到-arch选项只有apple的编译器支持.所以当然它不适用于Macports.我能做的最好的事情是使用-m32/ -m64options来指定我想要的架构.但是,这只会生成i386或x86_64格式的二进制文件.我真正想要的是在两个架构(Universal)中获得二进制文件,就像使用原始GCC编译器一样.
这是不支持还是已知问题?我已经尝试了整晚在Google上寻找答案,但我没有得到任何有用的东西.所以我只是开始怀疑我是否是唯一有这个问题的人,而且我错过了让它发挥作用的重要事项?真的很感激,如果有人能给我一些建议.
BTW.我已经安装了gcc46 +universal变体,但除了为每个体系结构编译单独的二进制文件之外,它并没有产生任何真正的通用.
兴.
我在终端模式下使用emacs。我知道如何通过F10键获取菜单。Emacs过去在终端模式下以单独缓冲区中的文本形式显示菜单。由于最近的更新,或者我安装了某些软件包,因此我注意到emacs开始为菜单项创建图形下拉列表(请参见屏幕截图)。但是,我只在一台计算机(Mac OS)上看到它,而其他计算机仍以“文本模式”显示菜单。谁能告诉我如何启用图形下拉列表菜单功能?这是最新的Emacs 24.3的新功能还是可以通过某些软件包启用?