迭代器失去了它的价值 - 简单的短循环c ++

时间:2015-12-05 12:34:42

标签: c++ loops iterator

这是一个简单的代码循环:

std::list<Worker*>::const_iterator checkSecond;
std::list<Worker*>::const_iterator workitt;

int i=0;
for (checkSecond=toCheck.getWorkersInMovie().begin(); i != 
toCheck.getNumOfWorkers(); ++checkSecond)
{
    cout<< "id of check is:" << endl;
    cout<<(*checkSecond) ->getId()<<endl; PRINTS 2, AS EXPECTED
    //toChecking = (*checkSecond);

    i++;
    int j=0;
    for (workitt=toReturn.getWorkersInMovie().begin(); j!= 
    toReturn.getNumOfWorkers(); ++workitt)
    {
        cout<< "ids are:" << endl;
        cout<< (*workitt)-> getId() << endl; PRINTS 24, AS EXPECTED
        cout<< (*checkSecond)->getId()<<endl; ALSO PRINTS 24
    }
  }

 list<Worker*> Movie::getWorkersInMovie() const{

return workersInMovie;

}

我不明白,为什么checkSecond会失去它的价值? getWorkersInMovie按值返回。

HELP ..?

1 个答案:

答案 0 :(得分:0)

由于Movie::getWorkersInMovie()按值返回某个列表的副本,因此您无法从该副本中获取迭代器。

您的代码具有未定义的行为,因为在分配给迭代器并且迭代器变为无效之后,列表超出了范围。

Movie::getWorkersInMovie()看起来应该返回一个引用到const:

list<Worker*> const& Movie::getWorkersInMovie() const;

但是,您可以使用基于范围的for循环迭代rvalue容器:

for(auto const& x : toCheck.getWorkersInMovie())
{
    ...
}

当循环退出时,此临时值将被破坏。