通过它循环时删除矢量元素 [英] deleting vector elements while looping thru it

查看:55
本文介绍了通过它循环时删除矢量元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在循环过程中删除

某些元素时循环向量的典型方法是什么?下面的代码有效,但是我想知道是否有更好的解决方案。

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
}
}

推荐答案

ka*****@hotmail.com 写道:

在循环过程中删除

某些元素时,循环向量的典型方法是什么?下面的代码有效,但我想知道是否有更好的解决方案。


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


Victor Bazarovaécrit:
Victor Bazarov a écrit :
ka ***** @ hotmail.com 写道:

>在循环过程中删除
某些元素时,循环矢量的典型方法是什么?下面的代码有效,但我想知道是否有更好的解决方案。

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。结束(),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


none写道:
none wrote:

Victor Bazarovaécrit:
Victor Bazarov a écrit :

> ka ***** @ hotmail.com 写道:

> >在循环过程中删除某些元素时循环向量的典型方法是什么?下面的代码有效,但我想知道是否有更好的解决方案。

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


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。( www.versatilecoding.com

标准C ++库扩展:一个教程和
的作者
参考。 ( www.petebecker.com/tr1book


这篇关于通过它循环时删除矢量元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆