这是一个简单的代码循环:
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 ..?
答案 0 :(得分:0)
由于Movie::getWorkersInMovie()
按值返回某个列表的副本,因此您无法从该副本中获取迭代器。
您的代码具有未定义的行为,因为在分配给迭代器并且迭代器变为无效之后,列表超出了范围。
Movie::getWorkersInMovie()
看起来应该返回一个引用到const:
list<Worker*> const& Movie::getWorkersInMovie() const;
但是,您可以使用基于范围的for循环迭代rvalue容器:
for(auto const& x : toCheck.getWorkersInMovie())
{
...
}
当循环退出时,此临时值将被破坏。