Partager via


partial_sum

Calcule une série de calculs de totaux dans une plage d'entrée du premier élément dans l'élément d'ithet stocke le résultat de chaque une telle somme dans l'élément d'ithd'une plage de destination ou calcule le résultat d'une procédure généralisée où l'exécution 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
    Un itérateur d'entrée adressant le premier élément de la plage partiellement à additionner ou être combinés en fonction d'une opération binaire spécifiée.

  • _Last
    Un itérateur d'entrée adressant le dernier élément dans la plage partiellement à additionner ou être combinés en fonction d'une opération binaire spécifiée qui est une position au delà de le dernier élément a réellement inclus dans l'accumulation itérée.

  • _Result
    Un itérateur de sortie adressant au premier élément une plage de destination où la série de calculs de totaux partielles ou les résultats de l'exécution spécifiée doit être stockée.

  • _Binary_op
    L'opération binaire qui doit être appliquée de l'exécution généralisée remplaçant l'exécution de la somme dans la procédure de somme partielle.

Valeur de retour

Un itérateur de sortie adressant la fin de la plage de destination : _Result + (_Last - _First),

Notes

Il permet à l'l'itérateur _Result de sortie pour être le même itérateur que l'itérateur d'entrée _First, afin que les sommes partielles puissent être calculées en place.

Pour une séquence de valeurs un1, un2, un3, dans une plage d'entrée, la première fonction de modèle stocke les sommes partielles consécutives dans la plage de destination, où l'élément d'ithest fourni par (((a1 + *a)*2+ *a)3a)*i.

Pour une séquence de valeurs un1, un2, un3, dans une plage d'entrée, la deuxième fonction de modèle stocke les sommes partielles consécutives dans la plage de destination, où l'élément d'ith est spécifié par (_Binary_op(1*a)2_Binary_opa)3a)*i.

L'opération binaire _Binary_op n'est pas nécessaire pour être ou associative ou commutatif, parce que l'ordre des opérations s'applique est complètement spécifié.

partial_sum a deux formes associées :

Si vous passez un itérateur vérifié l'une des formes d' partial_sum, vous obtenez le comportement d'itérateur vérifié.  Si vous passez un itérateur non réprimé, vous obtenez un comportement non réprimé.Pour plus d'informations, consultez Itérateurs vérifiés.

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>

l'espace de noms : DST

Voir aussi

Référence

partial_sum (STL Samples)

Modèles Standard