为了正常遍历向量数组,我使用索引(请参见代码)而不是迭代器。今天,我试图通过索引擦除矢量元素。我已经尝试了几次和几种方法,但是每次似乎在最后一行(在编译器中)都出现错误。请帮助我修复代码以通过索引擦除元素。提前致谢。
vector<pair<int, pair<int, int> > > p;
p.push_back(make_pair(1,make_pair(2,4))) ;
p.push_back(make_pair(5,make_pair(6,7))) ;
for(int i = 0; i != p.size(); i++)
if(p[i].first == 1)
p.erase(i);
Run Code Online (Sandbox Code Playgroud)
您可以使用
for(int i = 0; i != p.size(); ) // Don't increment here.
{
if(p[i].first == 1)
{
p.erase(p.begin() + i );
}
else
{
++i;
}
}
Run Code Online (Sandbox Code Playgroud)
但使用起来会更惯用:
for ( auto iter = p.begin(); iter != p.end(); )
{
if( iter->first == 1 )
{
iter = p.erase(iter);
}
else
{
++iter;
}
}
Run Code Online (Sandbox Code Playgroud)
更好的是,使用擦除删除惯用语。
p.erase(std::remove_if(p.begin(), p.end(),
[](std::pair<int, std::pair<int, int>> const& item) { return item.first == 1;}),
v.end());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40 次 |
| 最近记录: |