我已经找到了这个并在此处找到了一些内容:Variable not printing on iteration但我不确定这是否一定适用。
我发生的事情是我的程序在我这样称呼时正确打印所有值:
for (int i = 0; i < SampleVec.Matchups().size(); ++i){
std::cout << SampleVec.Matchups()[i] << std::endl;
}
或当我这样称呼它时:
std::vector<int> temp;
temp = SampleVec.Matchups();
for (std::vector<int>::const_iterator iter = temp.begin(); iter != temp.end(); iter++){
std::cout << *iter << std::endl;
}
但是当我这样写的时候
for (std::vector<int>::const_iterator iter = SampleVec.Matchups().begin(); iter != SampleVec.Matchups().end(); iter++){
std::cout << *iter << std::endl;
}
前两个值显示为0,其余值正确打印。在我发布的链接中,他们谈到从输入中删除换行符,但我不知道这是否适用于此处,甚至不知道如何执行此操作。如果需要运行,我可以发布完整的代码并查看功能。
答案 0 :(得分:3)
for (std::vector<int>::const_iterator iter = SampleVec.Matchups().begin(); iter != SampleVec.Matchups().end(); iter++){
std::cout << *iter << std::endl;
}
begin()
返回std::vector
返回的临时Matchups()
开头的迭代器。在使用iter
时,它是一个悬空的迭代器,因为临时已被破坏,因此你有未定义的行为。
在尝试通过迭代器访问结果之前,必须存储结果,就像在示例2中一样。