如何删除stl< map>来自迭代器的元素? [英] How to delete stl<map> element from iterator?
问题描述
在为地图制作迭代器并逐步完成循环后,我想
删除任何满足测试的条目外部函数。
MyMapType :: const_iterator iter;
for(iter = m-> begin(); iter!= m- > end(); ++ iter)
{
a = iter-> first;
b = iter-> second;
if(Test(a,b)== true)
iter-> delete?();
}
如何实际删除iter指向的元素?
谢谢
Steve
" Steve Edwards" < gf*@lineone.net>在消息中写道
news:gf *********************** @ news.btinternet.com ...
在为地图制作迭代器并逐步完成循环之后,我想从外部函数中删除任何满足测试要求的条目。
MyMapType :: const_iterator iter;
for(iter = m-> begin(); iter!= m-> end(); ++ iter)
这假定''m''是指向地图的指针的名称,
不是地图本身。我会在下面保留这个假设。
{
a = iter-> first;
b = iter-> second;
if(Test( a,b)== true)
iter-> delete?();
}
如何实际删除iter指向的元素?
for(iter = m-> begin(); iter!= m-> end(); ++ iter)
{
如果(条件)
iter = m-> erase(iter);
}
一个很好的参考对于C ++标准库:
www.josuttis.com/libbook
-Mike
Steve Edwards写道:制作迭代器后映射和逐步循环,我想从外部函数中删除任何满足测试的条目。
MyMapType :: const_iterator iter;
for( iter = m-> begin(); iter!= m-> end(); ++ iter)
{
a = i ter-> first;
b = iter-> second;
if(Test(a,b)== true)
iter-> delete?();
}
如何实际删除iter指向的元素?
您要求地图将其删除。
类似
m-> erase(iter);
请注意,之后删除''iter''变得无效。你不能在那之后再增加
。你可能想要像这样重写你的循环:
for(....;)//最后没有增量
{
a =
b =
if(..
m-> erase(iter ++);
else
++ iter;
}
V
-
请在邮寄回复时从我的地址中删除资金
" Victor Bazarov" v。******** @ comAcast。 net>写在消息中
news:mr ***************** @ newsread1.mlpsca01.us.to.verio.net ...Steve Edwards写道:
我如何实际删除iter指向的元素?
你要求你的地图擦除它。
某些东西如
m->擦除(iter);
小心,但是,在删除''iter'后,它变得无效。之后你不能增加它。你可能想要重写y我们这样的循环:
嗯,我想我们都拙劣了回复。我忘记了
''else''部分,而你忽略了无效的迭代器。 :-)
for(....;)//最后没有增量
{
a =
b =
if(。 。
m-> erase(iter ++);
iter = m-> erase(iter);
else
++ iter;
}
-Mike
Hi,
After making an iterator to a map and stepping through a loop, I want to
delete any entries that satisfy a test from an external function.
MyMapType::const_iterator iter;
for(iter = m->begin(); iter != m->end(); ++iter)
{
a = iter->first;
b = iter->second;
if ( Test(a,b) == true)
iter->delete?();
}
How do I actually delete the element that iter is pointing to?
Thanks
Steve
"Steve Edwards" <gf*@lineone.net> wrote in message
news:gf***********************@news.btinternet.com ...Hi,
After making an iterator to a map and stepping through a loop, I want to
delete any entries that satisfy a test from an external function.
MyMapType::const_iterator iter;
for(iter = m->begin(); iter != m->end(); ++iter)
This assumes that ''m'' is the name of a pointer to your map,
not of the map itself. I''ll keep that assumption below.
{
a = iter->first;
b = iter->second;
if ( Test(a,b) == true)
iter->delete?();
}
How do I actually delete the element that iter is pointing to?
for(iter = m->begin(); iter != m->end(); ++iter)
{
if(condition)
iter = m->erase(iter);
}
An excellent reference for the C++ standard library:
www.josuttis.com/libbook
-Mike
Steve Edwards wrote:After making an iterator to a map and stepping through a loop, I want to
delete any entries that satisfy a test from an external function.
MyMapType::const_iterator iter;
for(iter = m->begin(); iter != m->end(); ++iter)
{
a = iter->first;
b = iter->second;
if ( Test(a,b) == true)
iter->delete?();
}
How do I actually delete the element that iter is pointing to?
You ask your map to erase it.
Something like
m->erase(iter);
Beware, though, that after erasing the ''iter'' becomes invalid. You cannot
increment it after that. You might want to rewrite your loop like this:
for (.... ; ) // no increment at the end
{
a =
b =
if (..
m->erase(iter++);
else
++iter;
}
V
--
Please remove capital As from my address when replying by mail
"Victor Bazarov" <v.********@comAcast.net> wrote in message
news:mr*****************@newsread1.mlpsca01.us.to. verio.net...Steve Edwards wrote:How do I actually delete the element that iter is pointing to?
You ask your map to erase it.
Something like
m->erase(iter);
Beware, though, that after erasing the ''iter'' becomes invalid. You cannot
increment it after that. You might want to rewrite your loop like this:
Well, I think we both botched our replies. I forgot the
''else'' part, and yours disregards the invalid iterator. :-)
for (.... ; ) // no increment at the end
{
a =
b =
if (..
m->erase(iter++);
iter = m->erase(iter);
else
++iter;
}
-Mike
这篇关于如何删除stl< map>来自迭代器的元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!