Partager via


partial_sum

Calcule une série de sommes dans une plage d'entrée depuis le premier élément jusqu'à l'élément numéro i, puis stocke le résultat de chaque somme dans l'élément numéro i d'une plage de destination, ou calcule le résultat d'une procédure généralisée où l'opération de somme est remplacée par une autre opération binaire spécifiée.

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 
   );

Paramètres

  • _First
    Itérateur d'entrée qui traite le premier élément de la plage qui doit être partiellement additionné ou combiné, selon l'opération binaire spécifiée.

  • _Last
    Itérateur d'entrée qui traite le dernier élément d'une plage qui doit être partiellement additionné ou combiné selon une opération binaire spécifiée, et dont la position se trouve immédiatement après le dernier élément inclus dans l'accumulation itérée.

  • _Result
    Itérateur de sortie qui traite le premier élément d'une plage de destination dans laquelle les sommes partielles ou les résultats de l'opération spécifiée doivent être enregistrés.

  • _Binary_op
    Opération binaire qui doit être appliquée dans l'opération généralisée par le remplacement de l'opération de somme de la procédure de somme partielle.

Valeur de retour

Itérateur de sortie qui traite la fin de la plage de destination : _Result + (_Last - _First),

Notes

L'itérateur de sortie _Result peut être le même que l'itérateur d'entrée _First, afin que les sommes partielles puissent être calculées sur place.

Pour une séquence de valeurs a1, a2, a3, dans une plage d'entrée, la première fonction de modèle stocke des sommes partielles successives comprises dans la plage de destination, où l'élément numéro iest obtenu par ( ( (a1 + a2) + a3) ai).

Pour une séquence de valeurs a1, a2, a3, la deuxième fonction de modèle stocke des sommes partielles successives dans la plage de destination, où l'élément numéro i est obtenu par ( ( ( a1 _Binary_op a2 ) _Binary_op a3 ) ai).

Il n'est pas nécessaire que l'opération binaire _Binary_op soit associative ou commutative, car l'ordre des opérations appliqué est entièrement spécifié.

Exemple

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

Sortie

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 ).

Configuration requise

En-tête : <numeric>

Espace de noms : std

Voir aussi

Référence

partial_sum (Exemples STL)

Bibliothèque STL (Standard Template Library)