首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中删除类对象

在C++中删除类对象
EN

Stack Overflow用户
提问于 2017-03-14 22:03:48
回答 4查看 190关注 0票数 1

我在游戏机上做了一个简单的僵尸岛游戏,我试图让僵尸在人类着陆时死亡。

为了创建僵尸,我像这样使用了我的僵尸类:

代码语言:javascript
复制
Zombies *zombie = new Zombies[4];

为了检查人类和僵尸是否在同一位置,我使用了一个简单的for循环:

代码语言:javascript
复制
int zombieCount = 4;
for (int i = 0; i < 4; i++)
{
    if (player.getPosX() == zombie[i].getPosX() && player.getPosY() == zombie[i].getPosY())
    {
        zombieCount--;

    }
}

除了减少zombieCount,我击中的僵尸应该从游戏中消失。我该怎么做?

EN

回答 4

Stack Overflow用户

发布于 2017-03-14 22:14:13

在C++11中,可以使用std::remove(first, last, value)删除数组中的某些元素。该函数返回新数组的结尾,例如使用:

代码语言:javascript
复制
auto end = std::remove(std::begin(zombie), std::end(zombie), zombie[i]);

我建议使用std::vector,它是一个动态数组,更适合您的需要。

参考文献:std::removestd::vector

向量建议std::示例:

代码语言:javascript
复制
std::vector<Zombies> zombies;
// init with zombies.push_back(someZombie);

for (vector<Zombies>::iterator it = zombies.begin(); it != zombies.end(); /*no ++it*/) {
  if (player.getPosX() == it->getPosX() && player.getPosY() == it->getPosY())
      it = zombies.erase(it);
  else 
      ++it;
}

int zombieCount = zombies.size();
票数 2
EN

Stack Overflow用户

发布于 2017-03-14 22:46:16

您可以将std::erase-remove_if与lambda一起使用,如以下一行代码所示:

代码语言:javascript
复制
zombies.erase(std::remove_if(zombies.begin(), zombies.end(),
                  [& player](const Zombie& z){return player.getPosX() == z.getPosX() && player.getPosY() == z.getPosY();}),
              zombies.end());

假设您有一个可以重新排序的vector<Zombie> zombieslist<Zombie>或另一个容器。

票数 1
EN

Stack Overflow用户

发布于 2017-03-14 22:14:05

使用vector容器:

代码语言:javascript
复制
Zombies zombieModel;

std::vector<Zombies> zombieVec(10, zombieModel);

int zombieCount = zombieVec.size();
for (int i = 0; i < zombieVec.size(); i++)
{
    if (player.getPosX() == zombieVec[i].getPosX() && player.getPosY() == zombieVec[i].getPosY())
    {
        zombieCount--;
        zombieVec.erase(zombieVec.begin()+i);
        i--;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42788124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档