stl list erase [英] stl list erase

查看:80
本文介绍了stl list erase的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



您好

从STL列表中删除元素的正确方法是什么?

遍历列表

list< A *> _ls;

A * a;

list< A *> :: iterator si1;

for(si1 = _ls.begin() ; si1!= _ ls.end(); ++ si1){


if((* si1) - > check()){

a = (* si);

_ls.erase(si1);

/ *现在这个函数将pint si1指向下一个元素。 (没有

无效)现在如何继续使用for循环这将是一个

问题现在??? ..

* /


删除a;


}

}


Hi
What is the correct way to delete an element from STL list while
iterating through the list
list<A*> _ls;
A * a;
list<A*>::iterator si1;
for (si1=_ls.begin(); si1!=_ls.end();++si1) {

if ( (*si1)->check() ) {
a =(*si);
_ls.erase(si1);
/* Now this function will point pint si1 to next element. (no
invalidate) Now how to still continue with for loop which will be a
problem now ??? ..
*/

delete a;

}
}

推荐答案

" Paras" < PA ****** @ netscape.net>在留言中写道

新闻:3F ************ @ netscape.net ...
"Paras" <pa******@netscape.net> wrote in message
news:3F************@netscape.net...

你好

在遍历列表时,从STL列表中删除元素的正确方法是什么?

list< A *> _ls;
A * a;
列表< A *> :: iterator si1;
for(si1 = _ls.begin(); si1!= _ ls.end(); ++ si1){

if((* si1) - > check()){
a =(* si);
_ls.erase(si1);
/ *现在这个函数将pint si1指向下一个元素。 (没有
无效)现在如何仍然继续for循环这将是一个
问题现在??? ..
* /

删除一个;

}
}

Hi
What is the correct way to delete an element from STL list while
iterating through the list
list<A*> _ls;
A * a;
list<A*>::iterator si1;
for (si1=_ls.begin(); si1!=_ls.end();++si1) {

if ( (*si1)->check() ) {
a =(*si);
_ls.erase(si1);
/* Now this function will point pint si1 to next element. (no
invalidate) Now how to still continue with for loop which will be a
problem now ??? ..
*/

delete a;

}
}



list< A *> ; _ls;

A * a;

list< A *> :: iterator si1 = _ls.begin();

while(si1 != _ls.end())

{

if((* si1) - > check())

{

a = * si1;

// si1指向擦除后的下一个元素()

si1 = _ls.erase(si1);

删除a;


}

其他

++ si1;

}


-

ES Kim


list<A*> _ls;
A* a;
list<A*>::iterator si1 = _ls.begin();
while (si1 != _ls.end())
{
if ((*si1)->check())
{
a = *si1;
// si1 points to the next element after erase()
si1 = _ls.erase(si1);
delete a;

}
else
++si1;
}

--
ES Kim


你好,


erase返回一个迭代器,第一个元素超出任何元素

removed.so使用这个

我喜欢* while *所以我把它改成了抱歉.. ;-)


希望这会有所帮助。


//代码


列表< A *> _ls;

A * a;

list< A *> :: iterator si1 = _ls.begin();

while(si1 != _ ls.end()){


if((* si1) - > check()){

a =(* si);

si1 = _ls.erase(si1);

删除a;

}


else < br $>
{

si1 ++;

}

}


"第" < PA ****** @ netscape.net>在留言中写道

新闻:3F ************ @ netscape.net ...
Hello,

erase returns a iterator to first element remaining beyond any elements
removed.so use this

I like *while* so i have changed it to while sorry..;-)

Hope this helps.

//Code

list<A*> _ls;
A * a;
list<A*>::iterator si1 = _ls.begin();
while(si1 !=_ls.end()) {

if ( (*si1)->check() ) {
a =(*si);
si1 = _ls.erase(si1);
delete a;
}

else
{
si1++;
}
}

"Paras" <pa******@netscape.net> wrote in message
news:3F************@netscape.net...

你好

在遍历列表时,从STL列表中删除元素的正确方法是什么?

list< A *> _ls;
A * a;
列表< A *> :: iterator si1;
for(si1 = _ls.begin(); si1!= _ ls.end(); ++ si1){

if((* si1) - > check()){
a =(* si);
_ls.erase(si1);
/ *现在这个函数将pint si1指向下一个元素。 (没有
无效)现在如何仍然继续for循环这将是一个
问题现在??? ..
* /

删除一个;

}
}

Hi
What is the correct way to delete an element from STL list while
iterating through the list
list<A*> _ls;
A * a;
list<A*>::iterator si1;
for (si1=_ls.begin(); si1!=_ls.end();++si1) {

if ( (*si1)->check() ) {
a =(*si);
_ls.erase(si1);
/* Now this function will point pint si1 to next element. (no
invalidate) Now how to still continue with for loop which will be a
problem now ??? ..
*/

delete a;

}
}





" ES Kim" < ES *** @ svd.co.kr>在消息中写道

news:bh ********** @ news1.kornet.net ...

"ES Kim" <es***@svd.co.kr> wrote in message
news:bh**********@news1.kornet.net...
" Paras" < PA ****** @ netscape.net>在消息中写道
新闻:3F ************ @ netscape.net ...
"Paras" <pa******@netscape.net> wrote in message
news:3F************@netscape.net...

你好


迭代列表时从STL列表中删除元素的正确方法是什么

Hi
What is the correct way to delete an element from STL list while
iterating through the list



[snip]

list< A *> _ls;
A * a;
列表< A *> :: iterator si1 = _ls.begin();
while(si1!= _ls.end())
{
if((* si1) - > check())
{
a = * si1;
// si1指向erase()之后的下一个元素/> si1 = _ls.erase(si1);
删除a;


没有充分理由进行变通


删除* si1;

si1 = _ls.erase(si1);

}

++ si1;
}

-
ES Kim


[snip]

list<A*> _ls;
A* a;
list<A*>::iterator si1 = _ls.begin();
while (si1 != _ls.end())
{
if ((*si1)->check())
{
a = *si1;
// si1 points to the next element after erase()
si1 = _ls.erase(si1);
delete a;

No good reason for the a varaible

delete *si1;
si1 = _ls.erase(si1);
}
else
++si1;
}

--
ES Kim




john



john


这篇关于stl list erase的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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