我只是看一个代码,我必须说我还没有完全理解它。C++了解它并删除
vector<long>::iterator iter1;
vector<long>::iterator iter2;
while(m_vPitchMarks[0]<=vPitchPeriode[0])
{
iter1 = m_vPitchMarks.begin();
iter2 = vPitchPeriode.begin();
m_vPitchMarks.erase(iter1);
vPitchPeriode.erase(iter2);
if((m_vPitchMarks.size()==0)||(vPitchPeriode.size()==0))
break;
}
我试图打破它:
在这里,我们会做一个while语句,而m_vPitchMarks的第一个元素的值大于vPitchPeriod的第一个元素的值。
while(m_vPitchMarks[0]<=vPitchPeriode[0])
{
}
这里我们对两个向量的第一个元素(索引[0]处的元素)设置了一个引用。
iter1 = m_vPitchMarks.begin();
iter2 = vPitchPeriode.begin();
现在我们从m_vPitchMarks <>中删除所有具有此值的元素。 例如,如果iter1的值为15,则m_vPitchMarks <>中也具有值15的所有元素都将被删除,并且矢量将缩短。
m_vPitchMarks.erase(iter1);
vPitchPeriode.erase(iter2);
这是正确的吗? 谢谢。
此代码看起来应该是对'std :: mismatch'和一对范围''erase'调用的调用。 – chris
@davmac:迭代器无论如何都不会在擦除之后使用。但是,如果任何一个容器在开始时都是空的,那么第一次测试'while'确实是UB。从发布的代码中可以看出,这是否是一种可能的情况。 –
@davmac擦除之后的迭代器的下一次使用并不是真的重新分配它们。 – PeterSW