我有一个std::vector<Bullet> bullets,在下面的for循环中,如果它不再存在,我想从向量中删除它。

我的计划是使用pop_back()删除该元素。如果向量中有多个元素,我想先将要删除的元素与向量中的最后一个元素交换,然后调用pop_back()

for (std::vector<Bullet>::iterator b = bullets.begin(); b != bullets.end(); ++b) {
  if(!b->isAlive()) {
    if (bullets.size() > 1) {
      std::iter_swap(bullets + ..., bullets.end());
    }
    bullets.pop_back();
  }
}


问题是iter_swap中的第一个参数。我查找了http://www.cplusplus.com/reference/algorithm/iter_swap/,第一个参数的语法是vector +元素的位置。

如何在向量中找出b的索引?

最佳答案

如果控制是否要删除元素的条件是:

object->isAlive()


然后,您应该使用STL方式进行删除,即擦除删除习惯用法:

bullets.erase(std::remove_if(bullets.begin(), bullets.end(),
[](Bullet const& b) {
   return !b.isAlive();
}), bullets.end());




现在,要回答您的特定问题,可以像这样获得向量it中的迭代器的v索引:

auto indx = std::distance(v.begin(), it);

10-05 23:44