我只是在看一个代码,我必须说我还不完全了解它。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]){}在这里,我们设置了两个 vector 的第一个元素(索引为[0]的元素)的引用。iter1 = m_vPitchMarks.begin();iter2 = vPitchPeriode.begin();现在,我们擦除m_vPitchMarks 中所有具有该值的元素。例如,如果iter1的值为15,则m_vPitchMarks 中所有也具有值15的元素将被删除,并且 vector 将缩短。m_vPitchMarks.erase(iter1);vPitchPeriode.erase(iter2);那是对的吗?谢谢。 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 就像您这样说:while(m_vPitchMarks[0]<=vPitchPeriode[0])将在m_vPitchMarks的第一个值小于或等于等于vPitchPeriode的第一个值时循环播放。您对此代码的解释: iter1 = m_vPitchMarks.begin(); iter2 = vPitchPeriode.begin(); m_vPitchMarks.erase(iter1); vPitchPeriode.erase(iter2);不太正确。它只是从两个 vector 中删除第一个值。如果您使用的是std::deque或std::list,则只需调用pop_front即可获得相同的结果。然后,如果我们没有值,请停止循环: if((m_vPitchMarks.size()==0)||(vPitchPeriode.size()==0)) break;如果从 vector 的前面擦除一个元素,似乎是一条效率特别低下的路线,则需要移动剩下的每个元素。 (adsbygoogle = window.adsbygoogle || []).push({});
08-24 13:19