当通过向量移动(例如将其写入控制台)时,使用以下代码,我发现了一些奇怪的行为:
int a;
cin >> a;
vector<int> b(a);
srand(static_cast<unsigned int>(time(0)));
for (int i = 0; i< b.size(); i++)
{
b[i] = i;
cout << i << endl;
}
random_shuffle(b.begin(), b.end());
for(iter = b.begin(); iter != b.end(); iter++)
{
cout << *iter << endl;
}
for (int i = 0; i< b.size(); i++)
{
b[i] = i;
cout << i << endl;
}
随机随机应该洗牌所有元素。然而,第一个cout循环吐出预期的随机顺序,而第二个cout循环使用索引,按照它们在随机shuffle之前的顺序精确地吐出数字。这是为什么?
答案 0 :(得分:3)
在第二个循环中:
b[i] = i;
将b[i]
重新分配到i
并打印出i
。您可能想要打印b[i]
。
例如:
cout << b[i] << endl;