【发布时间】:2015-10-30 06:15:36
【问题描述】:
我昨天问了一个关于这个的问题,但由于沟通不畅,这个话题被搁置了。所以我试图运行一个程序来洗牌向量中的元素。这部分用以下代码完成:
srand(static_cast<unsigned int>(time(0)));
random_shuffle(scores.begin(), scores.end());
我接受代码运行没有错误,并且其他机器看到随机随机播放,但是当我运行此代码时,值显然不会随机播放。这是一个更大程序的一部分,当其他人运行该程序时,这些值显然被打乱了,但是当我尝试一遍又一遍地运行该程序时,这些值不会打乱。我可能天真地想知道这是因为我在 MacBook 上运行它,还是我的文件和文件夹没有正确组织。有人有什么想法吗?
编辑:这里是完整的代码:
#include <iostream>
#include <vector>
#include <algorithm>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
vector<int>::const_iterator iter;
cout << "Creating a list of scores.";
vector<int> scores;
scores.push_back(1500);
scores.push_back(3500);
scores.push_back(7500);
cout << "\nHigh Scores:\n";
for (iter = scores.begin(); iter != scores.end(); ++iter)
{
cout << *iter << endl;
}
cout << "\nRandomizing scores.";
srand(static_cast<unsigned int>(time(0)));
random_shuffle(scores.begin(), scores.end());
cout << "\nHigh Scores:\n";
for (iter = scores.begin(); iter != scores.end(); ++iter)
{
cout << *iter << endl;
}
cout << "\nSorting scores.";
sort(scores.begin(), scores.end());
cout << "\nHigh Scores:\n";
for (iter = scores.begin(); iter != scores.end(); ++iter)
{
cout << *iter << endl;
}
return 0;
}
我想这对每个人来说都可以正常运行,这就是我如此困惑的原因。
【问题讨论】:
-
你从哪里导入
time?例如,如果它来自datetime,那么您每次都会得到相同的种子。 -
老实说,我不确定,因为我对编程很陌生,但我知道当我打印时间值时,每次运行程序都会有所不同。但我认为是 ctime。
-
这个问题和你昨天问的封闭问题有什么不同?
-
问题有所不同,因为昨天我假设代码有问题,但显然不是这样。现在我问是否有人知道这可能是我的硬件或我所做的一些组织性事情的结果。
-
您应该只在程序开始时调用一次
srand(),而不是每次调用std::random_shuffle()。否则,一个紧密的循环将继续播种相同的值,因为time(0)每秒只更改一次。此外,您应该打印出static_cast<unsigned int>(time(0))给您的内容,以查看那里发生的情况。
标签: c++ random hardware shuffle