modulus, struct
Un objet de fonction prédéfinie qui exécute l'opération de division modulo ( operator%) à ses arguments.
template<class Type = void>
struct modulus : public binary_function <Type, Type, Type>
{
Type operator()(
const Type& Left,
const Type& Right
) const;
};
// specialized transparent functor for operator%
template<>
struct modulus<void>
{
template<class Type1, class Type2>
auto operator()(Type1&& Left, Type2&& Right) const
-> decltype(std::forward<Type1>(Left)
% std::forward<Type2>(Right));
};
Paramètres
Type, Type1, Type2
Tout type qui prend en charge operator% qui prend des opérandes des types spécifiés ou déduits.Left
L'opérande de gauche de l'opération modulo. Le modèle non spécialisé prend un argument de référence lvalue de type Type. Le modèle spécialisé perfectionne le transfert des arguments de référence lvalue et rvalue de type déduit Type1.Right
L'opérande de droite de l'opération modulo. Le modèle non spécialisé prend un argument de référence lvalue de type Type. Le modèle spécialisé perfectionne le transfert des arguments de référence lvalue et rvalue de type déduit Type2.
Valeur de retour
Le résultat de Left * % + Right. Le modèle spécialisé effectue de façon parfaite le transfert du résultat, qui a le type retourné par operator%.
Notes
Le functor modulus est limité aux types intégraux pour les types de données de base, ou aux types définis par l'utilisateur qui implémentent operator%.
Exemple
// functional_modulus.cpp
// compile with: /EHsc
#include <vector>
#include <functional>
#include <algorithm>
#include <iostream>
using namespace std;
int main( )
{
vector <int> v1, v2, v3 ( 6 );
vector <int>::iterator Iter1, Iter2, Iter3;
int i;
for ( i = 1 ; i <= 6 ; i++ )
{
v1.push_back( 5 * i );
}
int j;
for ( j = 1 ; j <= 6 ; j++ )
{
v2.push_back( 3 * j );
}
cout << "The vector v1 = ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")" << endl;
cout << "The vector v2 = ( " ;
for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
cout << *Iter2 << " ";
cout << ")" << endl;
// Finding the element-wise remainders of the elements of v1 & v2
transform (v1.begin( ), v1.end( ), v2.begin( ), v3.begin ( ),
modulus<int>() );
cout << "The element-wise remainders of the modular division\n are: ( " ;
for ( Iter3 = v3.begin( ) ; Iter3 != v3.end( ) ; Iter3++ )
cout << *Iter3 << " ";
cout << ")" << endl;
}
Configuration requise
En-tête : <functional>
Espace de noms : std