C ++使用迭代器时,前两个元素无法正确打印

时间:2016-07-27 20:25:59

标签: c++

我已经找到了这个并在此处找到了一些内容: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,其余值正确打印。在我发布的链接中,他们谈到从输入中删除换行符,但我不知道这是否适用于此处,甚至不知道如何执行此操作。如果需要运行,我可以发布完整的代码并查看功能。

1 个答案:

答案 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中一样。