Функция-член erase
принимает в качестве аргумента один или два итератора.
Так что этот вызов
v.erase(f);
, где f
является целым числом, недопустим.
Кроме того, в чем причина использования вашей собственной дурацкой функции find
вместо стандартного алгоритма std::find
?
Первый фрагмент кода может быть перезаписан следующим образом
auto it = std::find( std::begin( v ), std::end( v ), t2 );
if ( it != std::end( v ) ) v.erase( it );
//...
Или, если компилятор поддерживает C ++ 17, тогда
if ( auto it = std::find( std::begin( v ), std::end( v ), t2 ); it != std::end( v ) )
{
v.erase( it );
}
// ...
Если вам действительно нужно написать собственную функцию find
, то он может выглядеть, например, следующим образом
using vi = std::vector<int>;
vi::size_type find( const vi &v, const int &val )
{
vi::size_type i = 0;
while ( i != v.size() && v[i] != val ) ++i;
return i;
}
иможно назвать как
auto pos = find( v, t2 );
if ( pos != v.size() ) v.erase( std::next( std::begin( v ), pos ) );