partial_sum

Calcula una serie de sumas en un rango de entrada del primer elemento a través del elemento deconsideremos almacena el resultado de cada una suma en el elemento de ithde un rango de destino o calcula el resultado de un procedimiento general donde la operación de suma se reemplaza por otra operación binaria especificada.

template<class InputIterator, class OutIt>
   OutputIterator partial_sum(
      InputIterator _First, 
      InputIterator _Last,
      OutputIterator _Result
   );

template<class InputIterator, class OutIt, class Fn2>
   OutputIterator partial_sum(
      InputIterator _First, 
      InputIterator _Last,
      OutputIterator _Result, 
      BinaryOperation _Binary_op
   );

Parámetros

  • _First
    Un iterador de entrada que dirige el primer elemento del intervalo que se va a sumar o combinado parcialmente según una operación binaria especificada.

  • _Last
    Un iterador de entrada que las el último elemento del intervalo que se va a sumar o combinado parcialmente según una operación binaria especificada es una posición más allá del último elemento incluido realmente en la acumulación itera.

  • _Result
    Un iterador de salida que dirige el primer elemento un rango de destino donde va a almacenar la ejecución de sumas parciales o de los resultados de la operación especificada.

  • _Binary_op
    La operación binaria que debe aplicar en la operación generalizada que reemplaza la operación de suma en el procedimiento de suma parcial.

Valor devuelto

Un iterador de salida que indica al final del intervalo de destino: _Result + (_Last - _First),

Comentarios

El iterador _Result de salida se permite utilizar el mismo iterador que el iterador _Firstde entrada, para poder calcular sumas parciales en contexto.

Para una secuencia de valores un1, un2, un3, en un rango de entrada, la primera función de plantilla almacena sumas parciales sucesivas en el rango de destino, donde el elemento ith se proporciona mediante ( ( (a1 + un2) + un3) uni).

Para una secuencia de valores a1, un2, a3, en un rango de entrada, la segunda función de plantilla almacena sumas parciales sucesivas en el rango de destino, donde el elemento de ith se proporciona mediante ( ( ( un1_Binary_opa2 ) _Binary_opun3 ) ai).

La operación binaria _Binary_op no es necesario que o asociativa o conmutativo, ya que se aplica el orden de las operaciones se especifica completamente.

partial_sum tiene dos formularios relacionados:

Si pasa un iterador comprobado a uno de los formatos de partial_sum, obtiene comportamiento comprobado de iterador.  Si pasa un iterador desactivado, obtiene comportamiento unchecked.Para obtener más información, vea Iteradores comprobados.

Ejemplo

// numeric_partial_sum.cpp
// compile with: /EHsc
#include <vector>
#include <list>
#include <numeric>
#include <functional>
#include <iostream>

int main( ) 
{
   using namespace std;   
   vector<int> V1( 10 ), V2( 10 );
   vector<int>::iterator VIter1, VIter2, VIterend, VIterend2;

   list <int> L1;
   list <int>::iterator LIter1, LIterend;

   int t;
   for ( t = 1 ; t <= 10 ; t++ )
   {
      L1.push_back( t );
   }

   cout << "The input list L1 is:\n ( " ;
   for ( LIter1 = L1.begin( ) ; LIter1 != L1.end( ) ; LIter1++ )
      cout << *LIter1 << " ";
   cout << ")." << endl;

   // The first member function for the partial sums of
   // elements in a list output to a vector
   VIterend = partial_sum ( L1.begin ( ) , L1.end ( ) , 
      V1.begin ( ) );
   
   cout << "The output vector containing the partial sums is:\n ( " ;
   for ( VIter1 = V1.begin( ) ; VIter1 != VIterend ; VIter1++ )
      cout << *VIter1 << " ";
   cout << ")." << endl;

   // The second member function used to compute
   // the partial product of the elements in a list
   VIterend2 = partial_sum ( L1.begin ( ) , L1.end ( ) , V2.begin ( ) , 
      multiplies<int>( ) );
   
   cout << "The output vector with the partial products is:\n ( " ;
   for ( VIter2 = V2.begin( ) ; VIter2 != VIterend2 ; VIter2++ )
      cout << *VIter2 << " ";
   cout << ")." << endl;

   // Computation of partial sums in place
   LIterend = partial_sum ( L1.begin ( ) , L1.end ( ) , L1.begin ( ) );
   cout << "The in place output partial_sum list L1 is:\n ( " ;
   for ( LIter1 = L1.begin( ) ; LIter1 != LIterend ; LIter1++ )
      cout << *LIter1 << " ";
   cout << ")." << endl;
}

Output

The input list L1 is:
 ( 1 2 3 4 5 6 7 8 9 10 ).
The output vector containing the partial sums is:
 ( 1 3 6 10 15 21 28 36 45 55 ).
The output vector with the partial products is:
 ( 1 2 6 24 120 720 5040 40320 362880 3628800 ).
The in place output partial_sum list L1 is:
 ( 1 3 6 10 15 21 28 36 45 55 ).

Requisitos

encabezado: <numérico>

espacio de nombres: std

Vea también

Referencia

partial_sum (STL Samples)

Biblioteca de plantillas estándar