c++ - 我如何错误地使用 vector 迭代器?

标签 c++ vector iterator

此代码有效:

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/

相关文章:

c++ - 使用 std::sort 对具有结构对的列表进行排序

c++ - 在模板中返回一个迭代器

c++ - 这是否正确地将两个无符号 32 位整数组合成一个 C++ 中的无符号 64 位整数?

c++ - 在 C++ 中使用箭头符号指向多维 vector 的每个维度

c++ - 计算三次贝塞尔曲线的最快方法?

c++ - boost-variant的 vector

c++ - 类中重载 I/O 运算符的奇怪行为

c++ - 嵌套名称说明符中的类型不完整

c++ - 只将单词和撇号保留到字符串中的最佳方法?

c++ - 为什么我的 "choose k from n"算法适用于 std::vector 但不适用于 std::map?