此代码有效:
for (unsigned int i = 0; i != m_cResources.getLoadedPlayers().size(); i++) {
m_cResources.getLoadedPlayers()[i]->update();
}
当我尝试对以下代码使用迭代器时,我的程序挂起并停止工作:
for (std::vector<CPlayer*>::iterator i = m_cResources.getLoadedPlayers().begin();
i != m_cResources.getLoadedPlayers().end(); i++) {
(*i)->update();
}
getLoadedPlayers() 返回 CPlayer* 的 vector 。 Update是CPlayer中的一个成员函数。
我以前从未使用过迭代器,所以我不确定哪里出了问题。我认为错误不在此代码之外,因为第一个 block 有效。所以我假设我对迭代器的实现是错误的。有什么想法吗?
编辑:getLoadedPlayers() 按值而不是引用返回 vector 。这很可能是问题所在吗?但是第一个代码块不会也不起作用吗?我会尽快对此进行测试。
更新函数根据先前设置的标志修改 CPlayer 中的成员值。
最佳答案
如果像你说的 getLoadedPlayers() 按值返回 vector ,而不是引用,那么第一个循环也没有意义,因为在每次迭代中,表达式中都会使用 vector 的新拷贝
m_cResources.getLoadedPlayers()[i]->update();
当你在循环中使用迭代器时
for (std::vector<CPlayer*>::iterator i = m_cResources.getLoadedPlayers().begin();
i != .getLoadedPlayerm_cResourcess().end(); i++)
然后迭代器 i 和 getLoadedPlayerm_cResourcess().end() 指向不同的内存范围。所以他们可能无法比较。
如果你想让你的循环有任何意义,你应该使用对原始 vector 的引用。
关于c++ - 我如何错误地使用 vector 迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20509530/