【发布时间】:2014-07-10 17:44:59
【问题描述】:
我有一个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/,第一个参数的语法是向量+元素的位置。
如何找出向量中b 的索引?
【问题讨论】:
-
要么我遗漏了一些东西,要么你需要一个 iterator 作为第一个元素并且已经有了正确的迭代器:
b。 -
@Cyber 因为这需要线性时间,而交换和弹出需要恒定时间。
-
为了记录,
b - bullets.begin()会给出索引。 -
@delnan 您的
for循环需要线性时间。删除-擦除是交换和弹出。 -
你不想
iter_swap(b, bullets.end() - 1)(强调“- 1”)吗?