Compartilhar via


partial_sum

Calcula uma série de somas em um intervalo de entrada, do primeiro ao i-ésimo elemento e armazena o resultado de cada soma no i-ésimo elemento de um intervalo de destino ou calcula o resultado de um procedimento generalizado, em que a operação de soma é substituída por outra operação binária 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
    Um iterador de entrada que trata o primeiro elemento no intervalo para ser parcialmente somado ou combinado de acordo com uma operação binária especificada.

  • _Last
    Um iterador de entrada que trata o último elemento no intervalo para ser parcialmente somado ou combinado, de acordo com uma operação binária especificada que está uma posição além do elemento final de fato incluído no acúmulo iterado.

  • _Result
    Um iterador de saída que trata o primeiro elemento em um intervalo de destino onde a série de somas parciais ou os resultados da operação especificada deverão ser armazenados.

  • _Binary_op
    A operação binária que deverá ser aplicada na operação generalizada substituindo a operação de soma no procedimento de soma parcial.

Valor de retorno

Um iterador de saída que trata a extremidade do intervalo de destino: _Result + (_Last - _First),

Comentários

O iterador de saída _Result tem permissão para ser o mesmo iterador que o iterador de entrada _First, de modo que as somas parciais podem ser calculadas adequadamente.

Para uma sequência de valores a1, a2, a3, em um intervalo de entrada, a primeira função de modelo armazena somas parciais sucessivas no intervalo de destino, em que o i-ésimo elemento é fornecido por ( ( (a1 + a2) + a3) ai).

Para uma sequência de valores a1, a2, a3, em um intervalo de entrada, a segunda função de modelo armazena somas parciais sucessivas no intervalo de destino, em que o i-ésimo elemento é fornecido por ( ( ( a1 _Binary_op a2 ) _Binary_op a3 ) ai).

A operação binária _Binary_op não precisa obrigatoriamente ser associativa ou comutativa, pois a ordem das operações aplicada é totalmente especificada.

Exemplo

// 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;
}

Saída

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

Cabeçalho: <numeric>

Namespace: std

Consulte também

Referência

partial_sum (Exemplos da STL)

Biblioteca de Modelos Padrão