昨天我问了一个关于这个的问题,但由于沟通不畅,这个话题被搁置了。所以我试图运行一个程序来对矢量中的元素进行洗牌。此部分使用以下代码完成:
srand(static_cast<unsigned int>(time(0)));
random_shuffle(scores.begin(), scores.end());
我接受代码运行没有错误,并且其他机器看到随机shuffle,但是当我运行此代码时,值显然不会随机播放。这是一个更大的程序的一部分,当其他程序运行程序时,值显然是洗牌,但当我尝试一遍又一遍地运行程序时,值不会随机播放。我想,可能是天真的,如果这是因为我在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;
}
我想这对所有人来说都会正常运行,这就是为什么我很困惑。
答案 0 :(得分:0)
如果您的程序正在做一些不利的事情(例如未定义的行为),这会影响它访问任何内容的方式,包括与系统时间相关的数据。
标准库的实现质量可能存在问题,因此每次调用它时都会返回一个常量值而不是一个不同的值。某些实现仅访问系统时钟一次,因此多次调用time()
将在每次调用时返回相同的数据。 time()
不需要具有更好(小于)秒的粒度,因此很少有实现选择效率而非准确性的方法。
快速连续多次调用time()
- 包括多次运行程序 - 可能意味着测量的时间相同。
如果没有展示您问题的小而完整的代码示例,以及您运行它的环境描述,则无法提供明确的建议。
您的问题更可能出现在您的代码或您使用程序的方式中,而不是您的标准库或硬件的特定问题。但问题的所有相关概率都不为零。