我只是看一個代碼,我必須說我還沒有完全理解它。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