Структура plusplus Struct

Стандартный объект функции, который выполняет над своими аргументами операцию сложения (бинарное operator+).A predefined function object that performs the addition operation (binary operator+) on its arguments.

СинтаксисSyntax

template <class Type = void>
struct plus : public binary_function <Type, Type, Type>
{
    Type operator()(const Type& Left, const Type& Right) const;
};

// specialized transparent functor for operator+
template <>
struct plus<void>
{
  template <class T, class U>
  auto operator()(T&& Left, U&& Right) const`
    -> decltype(std::forward<T>(Left) + std::forward<U>(Right));
};

ПараметрыParameters

Тип, T, UType, T, U
Тип, поддерживающий бинарный operator+, который принимает операнды указанного или выводимого типа.A type that supports a binary operator+ that takes operands of the specified or inferred types.

СлеваLeft
Левый операнд в операции сложения.The left operand of the addition operation. Неспециализированный шаблон принимает ссылочный аргумент lvalue типа Type.The unspecialized template takes an lvalue reference argument of type Type. Специализированный шаблон выполняет точную пересылку ссылочных аргументов lvalue и rvalue для выводимого типа T.The specialized template does perfect forwarding of lvalue and rvalue reference arguments of inferred type T.

ПравильноRight
Правый операнд в операции сложения.The right operand of the addition operation. Неспециализированный шаблон принимает ссылочный аргумент lvalue типа Type.The unspecialized template takes an lvalue reference argument of type Type. Специализированный шаблон выполняет точную пересылку ссылочных аргументов lvalue и rvalue для выводимого типа U.The specialized template does perfect forwarding of lvalue and rvalue reference arguments of inferred type U.

Возвращаемое значениеReturn Value

Результат Left + Right.The result of Left + Right. Специализированный шаблон выполняет точную пересылку результата, который имеет тип, возвращаемый бинарным operator+.The specialized template does perfect forwarding of the result, which has the type that's returned by binary operator+.

ПримерExample

// functional_plus.cpp
// compile with: /EHsc
#include <vector>
#include <functional>
#include <algorithm>
#include <iostream>

using namespace std;

int main( )
{
   vector <double> v1, v2, v3 ( 6 );
   vector <double>::iterator Iter1, Iter2, Iter3;

   int i;
   for ( i = 0 ; i <= 5 ; i++ )
      v1.push_back( 4 * i );

   int j;
   for ( j = 0 ; j <= 5 ; j++ )
      v2.push_back( -2.0 * j - 4 );

   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 sums of the elements of v1 & v2
   transform (v1.begin( ), v1.end( ), v2.begin( ), v3.begin ( ), plus<double>( ) );

   cout << "The element-wise sums are: ( " ;
   for ( Iter3 = v3.begin( ) ; Iter3 != v3.end( ) ; Iter3++ )
      cout << *Iter3 << " ";
   cout << ")" << endl;
}
The vector v1 = ( 0 4 8 12 16 20 )
The vector v2 = ( -4 -6 -8 -10 -12 -14 )
The element-wise sums are: ( -4 -2 0 2 4 6 )