Listing 1: A typical implementation

template<typename _It, typename _T> 
inline _It remove(_It beg, _It end, const _T& val)
{
  beg = find(beg, end, val);
  if(beg == end)
    return end;
  else {
    _It target = beg;
    ++beg;
    for( ; beg != end; ++beg)
      if(val != *beg) {
        *target = *beg;
        ++target;
      }
    return target; 
  }
}
— End of Listing —