问题描述
在循环过程中删除
某些元素时循环向量的典型方法是什么?下面的代码有效,但是我想知道是否有更好的解决方案。
vector< intvTmp;
vTmp.push_back(1) ;
vTmp.push_back(2);
vTmp.push_back(1);
vTmp.push_back(2);
vTmp.push_back(1);
vTmp.push_back(1);
for(int x = 0; x< vTmp.size (); x ++)
{
if(vTmp [x] == 1)
{
vTmp .erase(vTmp.begin()+ x,vTmp.begin()+ x + 1);
x--; //占新尺寸
}
}
What is the typical way to loop through a vector while deleting
certain elements during the loop process? The code below works, but I
am wondering if there is a better solution.
vector<intvTmp;
vTmp.push_back(1);
vTmp.push_back(2);
vTmp.push_back(1);
vTmp.push_back(2);
vTmp.push_back(1);
vTmp.push_back(1);
for(int x=0; x<vTmp.size(); x++)
{
if(vTmp[x]==1)
{
vTmp.erase(vTmp.begin()+x,vTmp.begin()+x+1);
x--; //to account for new size
}
}
推荐答案
vTmp.erase(std :: remove_if( vTmp.begin(),vTmp.end(),1));
V
-
请删除资金''A'在通过电子邮件回复时
我没有回复最热门的回复,请不要问
vTmp.erase(std::remove_if(vTmp.begin(), vTmp.end(), 1));
V
--
Please remove capital ''A''s when replying by e-mail
I do not respond to top-posted replies, please don''t ask
vTmp.erase(std :: remove_if(vTmp.begin(),vTmp。结束(),1));
V
vTmp.erase(std::remove_if(vTmp.begin(), vTmp.end(), 1));
V
std :: remove_if(vTmp.begin(),vTmp。结束(),1);
应该足够......
-
JF
std::remove_if(vTmp.begin(), vTmp.end(), 1);
should be enough...
--
JF
vTmp.erase(std :: remove_if(vTmp.begin(),vTmp.end(), 1));
V
vTmp.erase(std::remove_if(vTmp.begin(), vTmp.end(), 1));
V
std :: remove_if(vTmp.begin(),vTmp.end(),1);
应该足够...
std::remove_if(vTmp.begin(), vTmp.end(), 1);
should be enough...
remove_if实际上并没有删除东西,它只是重新洗牌
顺序,以便被拒绝的元素在最后。完成后,你需要告诉向量这些元素不再是受控序列的一部分。你使用erase执行该操作,传递迭代器
由remove_if返回,因为序列的开始是
擦除,并且向量的结束迭代器为结束。
建议的代码并不完全正确。它应该使用remove(因为它的
第三个参数是一个值; remove_if需要一个谓词),并且它是缺少一个结束迭代器的
。应该是:
vTmpl.erase(std :: remove(vTmp.begin(),vTmp.end(),1),vTmp.end());
-
- Pete
Roundhouse Consulting,Ltd。()
标准C ++库扩展:一个教程和
的作者
参考。 ()
这篇关于通过它循环时删除矢量元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!