Estas son funciones que toman objetos de función unaria y binaria (funtores) y devuelven el complemento de esos objetos de función. Puede usarse en programación competitiva para obtener el complemento de funciones binarias y unarias.
Estas funciones son muy útiles cuando escribir código para la función de complemento es más difícil o largo. Por ejemplo, si queremos eliminar consonantes de una string, podemos escribir una función unaria para isVowel y podemos usar su complemento en la función remove_if de STL .
- not1: esta función toma el objeto de función unario y devuelve su objeto de complemento. Aquí necesitamos definir argument_type para el funtor unario en nuestro funtor.
Sintaxis:
template <class Predicate> unary_negate<Predicate> not1 (const Predicate& pred) { return unary_negate<Predicate>(pred); }
Parámetros: la función acepta un parámetro obligatorio pred que especifica el objeto de función unario que se va a negar.
Valor devuelto: la función devuelve el objeto unario negado.
Ejemplo:
// C++ program to demonstrate
// not1 function template
#include <bits/stdc++.h>
using
namespace
std;
struct
pred {
bool
operator()(
const
int
i)
const
{
return
(i % 2 == 0);
}
// defines argument_type for unary functor
// it is begin used by not1
// as argument_type
typedef
int
argument_type;
};
// Driver code
int
main()
{
vector<
int
> odd{ 1, 2, 3, 4, 5,
6, 7, 8, 9, 10 };
// simple pred functor use
// it removes even numbers
auto
end
= remove_if(odd.begin(),
odd.end(),
pred());
odd.resize(distance(odd.begin(), end));
cout <<
"removal of even elements: "
;
for
(
int
i = 0; i < odd.size(); i++) {
cout << odd[i] <<
" "
;
}
cout <<
"\n"
;
vector<
int
> even{ 1, 2, 3, 4, 5,
6, 7, 8, 9, 10 };
// complement of pred using not1
// which removes odd numbers
end
= remove_if(even.begin(),
even.end(),
not1(pred()));
even.resize(distance(even.begin(), end));
cout <<
"removal of odd elements: "
;
for
(
int
i = 0; i < even.size(); i++) {
cout << even[i] <<
" "
;
}
return
0;
}
Producción:removal of even elements: 1 3 5 7 9 removal of odd elements: 2 4 6 8 10
- not2: Esta función toma el funtor binario como argumento y devuelve el funtor complementario del mismo.
Sintaxis:
template <class Predicate> binary_negate<Predicate> not2 (const Predicate& pred) { return binary_negate<Predicate>(pred); }
Parámetros: la función acepta un parámetro obligatorio pred que especifica el objeto de función binaria que se negará.
Valor de retorno: la función devuelve el objeto binario negado.
Ejemplo:
// C++ program to demonstrate
// not2 function template
#include <bits/stdc++.h>
using
namespace
std;
int
main()
{
vector<
int
> vec{ 4, 2, 7, 9, 3, 5, 10, 6 };
// simple use of not2 just provide binary
// functor and it will return it complement
sort(vec.begin(), vec.end(), not2(less<
int
>()));
for
(
int
i = 0; i < vec.size(); i++) {
cout << vec[i] <<
" "
;
}
return
0;
}
Producción:10 9 7 6 5 4 3 2
Referencias:
Publicación traducida automáticamente
Artículo escrito por Aakash_Panchal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA