注册 登录
编程论坛 C++教室

关于STL容器删除元素的模板方法

wfpb 发布于 2007-11-17 10:36, 825 次点击


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\"));
}

1 回复
#2
aipb20072007-11-17 13:17
什么问题啊?大哥?编译不出来吗?
typename T::iterator iter = from.begin() , prev = iter;


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

然后就是别加错了头文件

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