Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? 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