通过向量移动时迭代器和索引之间的行为差​​异

时间:2014-05-21 15:09:22

标签: c++ vector iterator

当通过向量移动(例如将其写入控制台)时,使用以下代码,我发现了一些奇怪的行为:

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之前的顺序精确地吐出数字。这是为什么?

1 个答案:

答案 0 :(得分:3)

在第二个循环中:

b[i] = i;

b[i]重新分配到i并打印出i。您可能想要打印b[i]。 例如:

cout << b[i] << endl;