gpt4 book ai didi

c++ - vector 迭代器在类里面不兼容

转载 作者:行者123 更新时间:2023-11-30 03:04:39 25 4
gpt4 key购买 nike

我有一个非常简单的类,其中有一个 vector 作为私有(private)变量,如下所示:

#include "Zombie.h"
#include <vector>

class CGame{
public:
CGame();
void DoVectorStuff();
private:
std::vector<Zombie> zombies;
};

在函数 DoVectorStuff() 中,我只是像这样循环遍历 vector :

for(std::vector<Zombie>::iterator it = zombies.begin(); it != zombies.end(); ++it)
{
it->Update(delta);
}

这导致 Visual Studio 2010 在我运行它时给我一个调试断言。相同的代码在单独的函数中运行良好,我认为它与我将它添加到类中有关,但我无法弄清楚是什么。

编辑:http://i.imgur.com/xl6Z6.png这是我遇到的错误。

最佳答案

您得到 vector 迭代器不兼容的断言表明您正在尝试比较来自不同 vector 的迭代器。

通常你可以通过以下方式获得这些

可能性 1

std::vector<int> foo( 100 );
std::vector<int> bar( 100 );

for( std::vector<int>::iterator iter = foo.begin();
iter != bar.end();
++iter )
{
std::cout << *iter;
}

注意上面的代码,您会注意到我正在比较 iter,它是从 foo vectorbar.end()

的迭代器

可能性 2

另一种可能导致相同错误的方法是卡在无效迭代器上。

std::vector<int> foo( 3 );
std::vector<int>::iterator enditer = foo.end();

foo.push_back( 3 );
foo.push_back( 3 );
foo.push_back( 3 ); // can invalidate endIter above


for( std::vector<int>::iterator iter = foo.begin();
iter != enditer;
++iter )
{
std::cout << *iter;
}

请注意在上面的代码中我是如何卡在 endIter 上的,它可以通过向 foo

添加更多元素来使其无效

关于c++ - vector 迭代器在类里面不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8469159/

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