我只是在查看代码,我必须说我还没有完全理解它。
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&lt;&gt;中的所有元素只有这个价值。 例如,如果iter1的值为15,则m_vPitchMarks&lt;&gt;中的所有元素都是也将删除值为15,并且矢量会缩短。
m_vPitchMarks.erase(iter1);
vPitchPeriode.erase(iter2);
这是对的吗? 谢谢。
答案 0 :(得分:2)
几乎就像你说的那样:
while(m_vPitchMarks[0]<=vPitchPeriode[0])
当m_vPitchMarks
的第一个值小于或等于到vPitchPeriode
的第一个值时,将循环。
您对此代码的解释:
iter1 = m_vPitchMarks.begin();
iter2 = vPitchPeriode.begin();
m_vPitchMarks.erase(iter1);
vPitchPeriode.erase(iter2);
不太对劲。它只是从两个向量中删除第一个值。
如果您使用的是std::deque
或std::list
,那么您只需致电pop_front
即可获得相同的结果。
然后,如果我们超出值停止循环:
if((m_vPitchMarks.size()==0)||(vPitchPeriode.size()==0))
break;
如果从向量前面删除一个元素,则需要移动每个剩下的元素,这似乎是一种特别低效的路由。