Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5年前关闭。
使用以下代码遍历矢量(例如,将其写入控制台)时,我发现了一些奇怪的行为:
随机洗牌应洗牌所有元素。但是,第一个cout循环吐出预期的随机顺序,而第二个cout循环使用索引以完全按照随机洗牌之前的顺序吐出数字。为什么是这样?
将
例如:
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5年前关闭。
使用以下代码遍历矢量(例如,将其写入控制台)时,我发现了一些奇怪的行为:
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循环使用索引以完全按照随机洗牌之前的顺序吐出数字。为什么是这样?
最佳答案
在第二个循环中:
b[i] = i;
将
b[i]
重新分配给i
并打印出i
。您可能要打印b[i]
。例如:
cout << b[i] << endl;
关于c++ - 遍历 vector 时迭代器和索引之间的行为差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23787183/
10-12 20:46