c++ - vector::empty() 有问题,还是我遗漏了什么?

标签 c++ vector

我有这段代码,它抛出一个超出范围的错误。

if (!_enemyVec.empty())
    {
        for (std::vector<EnemyShip*>::size_type i = 0; i != _enemyVec.size(); i++)
        {
            if (!_projVec.empty())
            {
                for (std::vector<Projectile*>::size_type y = 0; y != _projVec.size(); y++)
                {
                    ===>_projVec[y]->CheckCollision(_enemyVec[i]);
                    if (_projVec[y]->Destroy())
                        DestroyProj(y);
                    if (_enemyVec[i]->Destroy())
                        DestroyShip(i);
                }
            }
        }
    }

请注意我如何得到 if (!_projVec.empty()) 如果 vector _projVec 为空,它应该为“false”。

“===>”是我得到超出范围错误的地方(因为 _projVec 是空的)。

根据 http://www.cplusplus.com/reference/vector/vector/empty/ vector::empty “返回 vector 是否为空(即它的大小是否为 0)。”

但是,当我运行代码时,它进入第二个 for 循环并抛出超出范围的错误,而我的 vector 为空(它的大小为 0)?

+       _projVec    { size=0 }  std::vector<Projectile *,std::allocator<Projectile *> >

我想我遗漏了一些东西,所以我想知道这里是否有人可以解决这个问题?

编辑:这是我的 DestroyProj/Ship 函数。

void ObjectManager::DestroyShip(std::vector<EnemyShip*>::size_type &index)
{
    delete _enemyVec[index];
    _enemyVec[index] = nullptr;
    _enemyVec.erase(_enemyVec.begin() + index);
    index--;
    AddScore(10);
}

void ObjectManager::DestroyProj(std::vector<Projectile*>::size_type &index)
{
    delete _projVec[index];
    _projVec[index] = nullptr;
    _projVec.erase(_projVec.begin() + index);
    index--;
}

正如 BWG 所指出的,如果它们从一开始就为空,则不应进行迭代,因此问题可能出在我将索引设置回一次的地方。我还意识到这可能不是一种遍历 vector 的糟糕方法,因此如果有人可以建议我采用不同的方法,我们将不胜感激。

请注意,在这个嵌套的 for 循环中,我希望能够从两个 vector 中删除一个项目。

最佳答案

您有两个嵌套循环修改两个 vector 。虽然从内部 vector 中删除是可以的,但从外部 vector 中删除一个元素则不然(假设外部只有一个元素)

关于c++ - vector::empty() 有问题,还是我遗漏了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20828851/

相关文章:

c++ - 三个类(class)相互联系

python - Ctypes:OSError:异常:堆栈溢出

c++ - 实现《战地》3's std::vector swap trick to "删除/添加“一个元素

c++ - 为什么对 vector 中类成员的引用指向不同对象的相同值?

vector - 获取向量的区间

c++ - 将 python numpy 数组转换为 C++ STL vector

c++ - FastCGI:检索请求 header

C++ 链接错误

c++ - Qt Creator 和静态库

c++ - 使用 push_back 将对象添加到 vector 工作正常,但是使用访问器语法 [ ] 添加对象,不起作用