Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wstępnie zdefiniowany obiekt funkcji, który wykonuje operację mnożenia (binarną operator*) na argumentach.
Składnia
template <class Type = void>
struct multiplies : public binary_function <Type, Type, Type>
{
Type operator()(const Type& Left, const Type& Right) const;
};
// specialized transparent functor for operator*
template <>
struct multiplies<void>
{
template <class T, class U>
auto operator()(T&& Left, U&& Right) const
-> decltype(std::forward<T>(Left) * std::forward<U>(Right));
};
Parametry
Typ, T, U
Typ obsługujący plik binarny operator* , który przyjmuje operandy określonych lub wywnioskowanych typów.
Left
Lewy operand operacji mnożenia. Niespecjalizowany szablon przyjmuje argument odwołania lvalue typu Type. Wyspecjalizowany szablon wykonuje doskonałe przekazywanie argumentów referencyjnych lvalue i rvalue wywnioskowanego typu T.
Right
Prawy operand operacji mnożenia. Niespecjalizowany szablon przyjmuje argument odwołania lvalue typu Type. Wyspecjalizowany szablon wykonuje doskonałe przekazywanie argumentów referencyjnych lvalue i rvalue wywnioskowanego typu U.
Wartość zwracana
Wynik .Left * Right Wyspecjalizowany szablon wykonuje doskonałe przekazywanie wyniku, który ma typ zwracany przez operator*element .
Przykład
// functional_multiplies.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( 2 * 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 products of the elements of v1 & v2
transform ( v1.begin( ), v1.end( ), v2.begin( ), v3.begin ( ),
multiplies<int>( ) );
cout << "The element-wise products of vectors V1 & v2\n are: ( " ;
for ( Iter3 = v3.begin( ) ; Iter3 != v3.end( ) ; Iter3++ )
cout << *Iter3 << " ";
cout << ")" << endl;
}
The vector v1 = ( 2 4 6 8 10 12 )
The vector v2 = ( 3 6 9 12 15 18 )
The element-wise products of vectors V1 & v2
are: ( 6 24 54 96 150 216 )