C ++理解它并擦除

时间:2015-08-14 16:16:25

标签: c++ vector iterator

我只是在查看代码,我必须说我还没有完全理解它。

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);

这是对的吗? 谢谢。

1 个答案:

答案 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::dequestd::list,那么您只需致电pop_front即可获得相同的结果。

然后,如果我们超出值停止循环:

    if((m_vPitchMarks.size()==0)||(vPitchPeriode.size()==0))
        break;

如果从向量前面删除一个元素,则需要移动每个剩下的元素,这似乎是一种特别低效的路由。