标题:关于STL容器删除元素的模板方法
只看楼主
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
 问题点数:0 回复次数:1 
关于STL容器删除元素的模板方法


template<class T,class Function>
void EraseFromBy(T& from,Function by)
{
T::iterator iter = from.begin() , prev = iter;
while(iter!=from.end())
{
if(by(*iter))
{
t.erase(iter);
if(prev == iter)
iter = prev = from.begin();
else
{
iter = prev;
iter++;
}
}
else
{
prev = iter;
iter++;
}
}
}



使用方法:
bool ShouldBeDeal(int a) //该函数传递给EraseFromBy,用于做删除的判断选项
{
if(a%2==0)
return true;
return false;
}
void main( void )
{
set<int> s;
s.insert(1);
s.insert(2);
s.insert(3);
s.insert(4);
copy(s.begin(),s.end(),ostream_iterator<int>(cout,\"\n\"));
EraseFromBy(s,ShouldBeDeal);
copy(s.begin(),s.end(),ostream_iterator<int>(cout,\"\n\"));
}

搜索更多相关主题的帖子: STL 容器 元素 模板 bool 
2007-11-17 10:36
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
得分:0 
什么问题啊?大哥?编译不出来吗?
typename T::iterator iter = from.begin() , prev = iter;


t.erase(iter); //t是from把?

然后就是别加错了头文件

这个模版参数依赖太强了,不好,这个功能有现成的吧,stl里!

Fight  to win  or  die...
2007-11-17 13:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-186662-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.997737 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved