stl list erase [英] 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屋!