Aus*_*ore 5 c++ iterator loops stl vector
我有一个vector指向抽象类型的指针Rock:
vector<Rock*> rocks;
Run Code Online (Sandbox Code Playgroud)
如果我使用迭代器遍历向量然后尝试通过迭代器访问对象(扩展的非抽象类Rock),我在XCode 4中得到一个'EXC_BAD_ACCESS'错误:
vector<Rock*>::iterator rockIter;
for (rockIter = rocks.begin(); rockIter != rocks.end(); ++rockIter)
{
bullet.hit(*(*rockIter));
}
Run Code Online (Sandbox Code Playgroud)
但循环通过它通常是没有问题:
for (int i = 0; i < rocks.size(); i++)
{
bullet.hit(*rocks[i]);
}
Run Code Online (Sandbox Code Playgroud)
该功能hit()如下:
bool Bullet::hit(Rock & rock)
Run Code Online (Sandbox Code Playgroud)
我想到了,*(*rockIter)并*rock[i]会做同样的事情但显然他们不这样做.有什么不同,我怎么能通过像我一样的迭代器传递向量中的对象的引用*rock[i]?
没有看到更多的代码,我不确定这是否是问题,但是bullet.hit()通过添加元素来改变向量的代码是什么?如果是,并且您正在使用a迭代它iterator,那么迭代器将失效,并且将来的任何解引用都将导致未定义的行为.但是,使用int基于标准的for循环不会出现此问题,因为索引的访问不会失效.
希望这可以帮助!