我对C ++相当陌生,但是对向量有疑问。我的目标是在超出边界条件后使用擦除从向量中删除元素。这一切似乎都可以正常工作,只是当我调用擦除时,它将指向第一个元素,但是删除最后一个。基本上,循环将继续迭代并从向量中删除每个元素。我正在使用push_back将Lasers添加到代码中其他位置的矢量上。
std::vector<Laser> m_Lasers;
for (int i = 0; i != m_Lasers.size(); i++)
{
m_Lasers[i].ClearLaser();
if (m_Lasers[i].GetX() > m_ScreenWidth || m_Lasers[i].GetX() < 0 || m_Lasers[i].GetY() < 0)
{
//erase the vector
m_Lasers.erase(m_Lasers.begin() + i);
i--;
}
}
Run Code Online (Sandbox Code Playgroud)
我的= operator定义为:
void operator=(const Laser& L){};
Run Code Online (Sandbox Code Playgroud)
在我的激光课上。我认为我的问题可能与此有关。
非常感谢您的帮助!
什么vector::erase不被擦除的元素使用前转让后,然后摧毁最后一个元素移动的所有元素。必须这样做以保持向量中元素连续存储的不变性。
例如,给一个v大小为4 的向量,v[1]基本上擦除了v[1] = v[2]; v[2] = v[3]; v.pop_back();(实际上是移动分配;std::move为清楚起见,省略了该操作。)
如果您的任务是无操作的(erase顺便说一句,这是的要求所不允许的),那么这将最终破坏最后一个元素。