gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:19:43 26 4
gpt4 key购买 nike

此代码有效:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com