binder1st, classe
Modèle de classe fournissant un constructeur qui convertit un objet de fonction binaire en objet de fonction unaire en liant le premier argument de la fonction binaire à une valeur spécifiée. Déconseillé en C++11 en faveur de la liaison et supprimé en C++17.
Syntaxe
template <class Operation>
class binder1st
: public unaryFunction <typename Operation::second_argument_type,
typename Operation::result_type>
{
public:
typedef typename Operation::argument_type argument_type;
typedef typename Operation::result_type result_type;
binder1st(
const Operation& binary_fn,
const typename Operation::first_argument_type& left);
result_type operator()(const argument_type& right) const;
result_type operator()(const argument_type& right) const;
protected:
Operation op;
typename Operation::first_argument_type value;
};
Paramètres
binary_fn
Objet de fonction binaire à convertir en un objet de fonction unaire.
left
Valeur à laquelle le premier argument de l’objet de fonction binaire doit être lié.
right
Valeur de l’argument que l’objet binaire adapté compare à la valeur fixe du deuxième argument.
Valeur de retour
Objet de fonction unaire qui résulte de la liaison du premier argument de l’objet de fonction binaire à gauche.
Notes
Le modèle de classe stocke une copie d’un objet de fonction binaire binary_fn dans op
, et une copie de gauche dans value
. Il définit sa fonction operator()
membre comme retournant op(value, right)
.
Si binary_fn est un objet de type Operation
et c
est une constante, il bind1st(binary_fn, c)
s’agit d’un équivalent plus pratique à binder1st<Operation>(binary_fn, c)
. Pour plus d’informations, consultez bind1st.
Exemple
// functional_binder1st.cpp
// compile with: /EHsc
#include <vector>
#include <functional>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
vector<int> v1;
vector<int>::iterator Iter;
int i;
for (i = 0; i <= 5; i++)
{
v1.push_back(5 * i);
}
cout << "The vector v1 = ( ";
for (Iter = v1.begin(); Iter != v1.end(); Iter++)
cout << *Iter << " ";
cout << ")" << endl;
// Count the number of integers > 10 in the vector
vector<int>::iterator::difference_type result1;
result1 = count_if(v1.begin(), v1.end(),
binder1st<less<int> >(less<int>(), 10));
cout << "The number of elements in v1 greater than 10 is: "
<< result1 << "." << endl;
// Compare use of binder2nd fixing 2nd argument:
// count the number of integers < 10 in the vector
vector<int>::iterator::difference_type result2;
result2 = count_if(v1.begin(), v1.end(),
binder2nd<less<int> >(less<int>(), 10));
cout << "The number of elements in v1 less than 10 is: "
<< result2 << "." << endl;
}
The vector v1 = ( 0 5 10 15 20 25 )
The number of elements in v1 greater than 10 is: 3.
The number of elements in v1 less than 10 is: 2.
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour