gpt4 book ai didi

c++ - 如何使用 erase() 函数通过索引删除 vector ?

转载 作者:太空宇宙 更新时间:2023-11-04 14:59:20 24 4
gpt4 key购买 nike

为了正常遍历 vector 数组,我使用索引(参见代码)而不是使用迭代器。今天,我尝试通过索引删除 vector 元素。我已经尝试了几次和几种方法,但每次最后一行(在编译器中)似乎都有错误。请帮助我修复代码以通过索引删除元素。提前致谢。

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

最佳答案

你可以使用

for(int i = 0; i != p.size(); ) // Don't increment here.
{
if(p[i].first == 1)
{
p.erase(p.begin() + i );
}
else
{
++i;
}
}

但使用起来会更加地道:

for ( auto iter = p.begin(); iter != p.end(); )
{
if( iter->first == 1 )
{
iter = p.erase(iter);
}
else
{
++iter;
}
}

更好的是,使用 erase-remove idiom .

p.erase(std::remove_if(p.begin(), p.end(),
[](std::pair<int, std::pair<int, int>> const& item) { return item.first == 1;}),
v.end());

关于c++ - 如何使用 erase() 函数通过索引删除 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59001959/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com