C++ understanding iter and erase
C++ understanding iter and erase
我只是在看一段代码,我必须说我还没有完全理解它。
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;
}
我正在试着打破它:
当m_vPitchMarks的第一个元素的值小于vPitchPeriod的第一个元素的值时,执行while语句。
while(m_vPitchMarks[0]<=vPitchPeriode[0])
{
}
在这里,我们设置了一个类似引用的东西,指向两个向量的第一个元素(index[0]处的元素)。
iter1 = m_vPitchMarks.begin();
iter2 = vPitchPeriode.begin();
现在我们擦除m_vPitchMarks<>中刚好有这个值的所有元素。例如,如果iter1的值为15,则m_vPitchMarks<>中所有值也为15的元素将被删除,并且向量将被缩短。
m_vPitchMarks.erase(iter1);
vPitchPeriode.erase(iter2);
正确吗?谢谢你。
几乎就在你这么说的时候:
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;
似乎是一个特别低效的路径,因为从vector的前面删除一个元素需要移动剩下的每个元素。
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 为什么 Clang 不允许"and"作为函数名称?
- 位阵列上的快速AND运算
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- BoostPython and CMake
- OpenSSL BIO and SSL_read
- Gurobi GRBModel and GRBmodel in C++
- std::visit and std::variant usage
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- Directx12 and keystrokes
- different between int **arr =new int [ n]; and int a[i][j]?
- C++ getenv and setenv
- Inference pytorch C++ with alexnet and cv::imread image
- C++ 结构错误"调用'erase'没有匹配函数
- Visual Studio 2019 C++ and std::filesystem
- 模板化"find-and-erase"函数中的错误
- vector::erase and reverse_iterator
- boost::multi_index and std::map find() and erase()
- C++ understanding iter and erase