Fungsi <numeric>

Mengumpulkan

Menghitung jumlah semua elemen dalam rentang tertentu, termasuk beberapa nilai awal, dengan menghitung jumlah parsial berturut-turut. Atau, menghitung hasil sebagian berturut-turut dari operasi biner tertentu.

template <class InputIterator, class Type>
Type accumulate(
    InputIterator first,
    InputIterator last,
    Type init);

template <class InputIterator, class Type, class BinaryOperation>
Type accumulate(
    InputIterator first,
    InputIterator last,
    Type init,
    BinaryOperation binary_op);

Parameter

first
Iterator input yang membahas elemen pertama dalam rentang untuk menjumlahkan atau menggabungkan dengan menggunakan binary_op.

last
Iterator input yang menangani elemen terakhir dalam rentang untuk menjumlahkan atau menggabungkan dengan menggunakan binary_op, itu adalah satu posisi di luar elemen akhir yang benar-benar disertakan dalam akumulasi iterasi.

init
Nilai awal di mana setiap elemen pada gilirannya ditambahkan atau dikombinasikan dengan menggunakan binary_op.

binary_op
Operasi biner untuk diterapkan ke setiap elemen dalam rentang yang ditentukan dan hasil aplikasi sebelumnya.

Nilai hasil

Jumlah init dan semua elemen dalam rentang yang ditentukan untuk fungsi templat pertama, atau, untuk fungsi templat kedua, hasil penerapan operasi biner binary_op alih-alih operasi penjumlahan, ke (*PartialResult, in_iter), di mana PartialResult adalah hasil dari aplikasi operasi sebelumnya dan in_iter adalah iterator yang menunjuk ke elemen berikutnya dalam rentang.

Keterangan

Nilai awal memastikan bahwa ada hasil yang ditentukan dengan baik ketika rentang kosong, dalam hal init dikembalikan. Operasi biner tidak perlu asosiatif atau komutatif. Hasilnya diinisialisasi ke init nilai awal dan kemudian menghasilkan = binary_op(hasil, in_iter) dihitung secara berulang melalui rentang, di mana in_iter adalah iterator yang menunjuk ke setiap elemen berturut-turut dalam rentang. Rentang harus valid, dan kompleksitasnya linier dengan ukuran rentang. Jenis pengembalian operator biner harus dapat dikonversi ke Jenis untuk memastikan penutupan selama iterasi.

Contoh

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

int main( )
{
   using namespace std;

   vector <int> v1, v2(20);
   vector <int>::iterator iter1, iter2;

   int i;
   for (i = 1; i < 21; i++)
   {
      v1.push_back(i);
   }

   cout << "The original vector v1 is:\n ( " ;
   for (iter1 = v1.begin(); iter1 != v1.end(); iter1++)
      cout << *iter1 << " ";
   cout << ")." << endl;

   // The first member function for the accumulated sum
   int total;
   total = accumulate(v1.begin(), v1.end(), 0);

   cout << "The sum of the integers from 1 to 20 is: "
        << total << "." << endl;

   // Constructing a vector of partial sums
   int j = 0, partotal;
   for (iter1 = v1.begin(); iter1 != v1.end(); iter1++)
   {
      partotal = accumulate(v1.begin(), iter1 + 1, 0);
      v2[j] = partotal;
      j++;
   }

   cout << "The vector of partial sums is:\n ( " ;
   for (iter2 = v2.begin(); iter2 != v2.end(); iter2++)
      cout << *iter2 << " ";
   cout << ")." << endl << endl;

   // The second member function for the accumulated product
   vector <int> v3, v4(10);
   vector <int>::iterator iter3, iter4;

   int s;
   for (s = 1; s < 11; s++)
   {
      v3.push_back(s);
   }

   cout << "The original vector v3 is:\n ( " ;
   for (iter3 = v3.begin(); iter3 != v3.end(); iter3++)
      cout << *iter3 << " ";
   cout << ")." << endl;

   int ptotal;
   ptotal = accumulate(v3.begin(), v3.end(), 1, multiplies<int>());

   cout << "The product of the integers from 1 to 10 is: "
        << ptotal << "." << endl;

   // Constructing a vector of partial products
   int k = 0, ppartotal;
   for (iter3 = v3.begin(); iter3 != v3.end(); iter3++) {
      ppartotal = accumulate(v3.begin(), iter3 + 1, 1, multiplies<int>());
      v4[k] = ppartotal;
      k++;
   }

   cout << "The vector of partial products is:\n ( " ;
   for (iter4 = v4.begin(); iter4 != v4.end(); iter4++)
      cout << *iter4 << " ";
   cout << ")." << endl;
}
The original vector v1 is:
( 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ).
The sum of the integers from 1 to 20 is: 210.
The vector of partial sums is:
( 1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136 153 171 190 210 ).

The original vector v3 is:
( 1 2 3 4 5 6 7 8 9 10 ).
The product of the integers from 1 to 10 is: 3628800.
The vector of partial products is:
( 1 2 6 24 120 720 5040 40320 362880 3628800 ).

adjacent_difference

Menghitung perbedaan berturut-turut antara setiap elemen dan pendahulunya dalam rentang input. Menghasilkan hasil ke rentang tujuan. Atau, menghitung hasil prosedur umum di mana operasi perbedaan digantikan oleh operasi biner lain yang ditentukan.

template <class InputIterator, class OutIterator>
OutputIterator adjacent_difference(
    InputIterator first,
    InputIterator last,
    OutputIterator result);

template <class InputIterator, class OutIterator, class BinaryOperation>
OutputIterator adjacent_difference(
    InputIterator first,
    InputIterator last,
    OutputIterator result,
    BinaryOperation binary_op);

template <class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>
ForwardIterator2 adjacent_difference(
    ExecutionPolicy&& exec,
    ForwardIterator1 first,
    ForwardIterator1 last,
    ForwardIterator2 result);

template <class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2,
class BinaryOperation>
ForwardIterator2 adjacent_difference(
    ExecutionPolicy&& exec,
    ForwardIterator1 first,
    ForwardIterator1 last,
    ForwardIterator2 result,
    BinaryOperation binary_op);

Parameter

Exec
Kebijakan eksekusi.

first
Iterator input yang membahas elemen pertama dalam rentang input yang elemennya akan dibedakan dengan pendahulunya masing-masing atau di mana pasangan nilai akan dioperasikan oleh operasi biner lain yang ditentukan.

last
Iterator input yang membahas elemen terakhir dalam rentang input yang elemennya akan dibedakan dengan pendahulunya masing-masing atau di mana pasangan nilai akan dioperasikan oleh operasi biner lain yang ditentukan.

result
Iterator output yang membahas elemen pertama rentang tujuan di mana serangkaian perbedaan atau hasil operasi yang ditentukan akan disimpan.

binary_op
Operasi biner untuk diterapkan dalam operasi umum, menggantikan operasi pengurangan dalam prosedur yang berbeda.

Nilai hasil

Iterator output yang membahas akhir rentang tujuan: result + ( - lastfirst).

Keterangan

Hasil iterator output diizinkan untuk menjadi iterator yang sama dengan iterator input terlebih dahulu, sehingga adjacent_difference nilai dapat dihitung di tempat.

Untuk urutan nilai 1, 2, 3, dalam rentang input, fungsi templat pertama menyimpan nilai berturut-turut adjacent_difference 1, 2 - 1, a3 - a 2, dalam rentang tujuan.

Untuk urutan nilai 1, 2, 3, dalam rentang input, fungsi templat kedua menyimpan nilai berturut-turut adjacent_difference 1, 2 binary_op1, 3 binary_op2, dalam rentang tujuan.

Operasi biner binary_op tidak diperlukan untuk asosiatif atau komutatif, karena urutan operasi yang diterapkan ditentukan.

Contoh

// numeric_adj_diff.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, LIterend2;

   int t;
   for ( t = 1 ; t <= 10 ; t++ )
   {
      L1.push_back( t * 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 adjacent_differences of
   // elements in a list output to a vector
   VIterend = adjacent_difference ( L1.begin ( ) , L1.end ( ) ,
      V1.begin ( ) );

   cout << "Output vector containing adjacent_differences is:\n ( " ;
   for ( VIter1 = V1.begin( ) ; VIter1 != VIterend ; VIter1++ )
      cout << *VIter1 << " ";
   cout << ")." << endl;

   // The second member function used to compute
   // the adjacent products of the elements in a list
   VIterend2 = adjacent_difference ( L1.begin ( ) , L1.end ( ) , V2.begin ( ) ,
      multiplies<int>( ) );

   cout << "The output vector with the adjacent products is:\n ( " ;
   for ( VIter2 = V2.begin( ) ; VIter2 != VIterend2 ; VIter2++ )
      cout << *VIter2 << " ";
   cout << ")." << endl;

   // Computation of adjacent_differences in place
   LIterend2 = adjacent_difference ( L1.begin ( ) , L1.end ( ) , L1.begin ( ) );
   cout << "In place output adjacent_differences in list L1 is:\n ( " ;
   for ( LIter1 = L1.begin( ) ; LIter1 != LIterend2 ; LIter1++ )
      cout << *LIter1 << " ";
   cout << ")." << endl;
}

exclusive_scan

Menghitung operasi penjumlahan awalan eksklusif dengan menggunakan std::plus<>() operator biner tertentu selama rentang, dengan nilai awal. Menulis hasil ke rentang yang dimulai pada tujuan yang ditentukan. Jumlah awalan eksklusif berarti elemen input nth tidak disertakan dalam jumlah nth. Kelebihan beban yang menyertakan argumen kebijakan eksekusi dijalankan sesuai dengan kebijakan yang ditentukan.

template<class InputIterator, class OutputIterator, class Type>
OutputIterator exclusive_scan(
    InputIterator first,
    InputIterator last,
    OutputIterator result,
    Type init);

template<class InputIterator, class OutputIterator, class Type, class BinaryOperation>
OutputIterator exclusive_scan(
    InputIterator first,
    InputIterator last,
    OutputIterator result,
    Type init,
    BinaryOperation binary_op);

template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class Type>
ForwardIterator2 exclusive_scan(
    ExecutionPolicy&& exec,
    ForwardIterator1 first,
    ForwardIterator1 last,
    ForwardIterator2 result,
    Type init);

template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class Type, class BinaryOperation>
ForwardIterator2 exclusive_scan(
    ExecutionPolicy&& exec,
    ForwardIterator1 first,
    ForwardIterator1 last,
    ForwardIterator2 result,
    Type init,
    BinaryOperation binary_op);

Parameter

Exec
Kebijakan eksekusi.

first
Iterator input yang membahas elemen pertama dalam rentang untuk menjumlahkan atau menggabungkan dengan menggunakan binary_op.

last
Iterator input yang menangani elemen terakhir dalam rentang untuk menjumlahkan atau menggabungkan dengan menggunakan binary_op, itu adalah satu posisi di luar elemen akhir yang benar-benar disertakan dalam akumulasi iterasi.

result
Iterator output yang membahas elemen pertama rentang tujuan di mana rangkaian jumlah atau hasil operasi yang ditentukan akan disimpan.

init
Nilai awal di mana setiap elemen pada gilirannya ditambahkan atau dikombinasikan dengan menggunakan binary_op.

binary_op
Operasi biner untuk diterapkan ke setiap elemen dalam rentang yang ditentukan dan hasil aplikasi sebelumnya.

Nilai hasil

Iterator output yang membahas akhir rentang tujuan: hasil + (terakhir - terlebih dahulu).

gcd

Menghitung pembavisor umum terbesar dari bilangan bulat m dan n.

template <class M, class N>
constexpr common_type_t<M,N> gcd(M m, N n);

Parameter

m, n
Nilai jenis integral.

Nilai hasil

Mengembalikan pembagi umum terbesar dari nilai absolut m dan n, atau nol jika m dan n adalah nol. Hasilnya tidak terdefinisi jika nilai absolut m atau n tidak dapat diwakili sebagai nilai jenis common_type_t<M,N>.

inclusive_scan

Menghitung operasi penjumlahan awalan inklusif dengan menggunakan std::plus<>() operator biner tertentu selama rentang, dengan nilai awal. Menulis hasil ke rentang yang dimulai pada tujuan yang ditentukan. Jumlah awalan inklusif berarti elemen input nth disertakan dalam jumlah nth. Kelebihan beban yang menyertakan argumen kebijakan eksekusi dijalankan sesuai dengan kebijakan yang ditentukan.

template<class InputIterator, class OutputIterator>
OutputIterator inclusive_scan(
    InputIterator first,
    InputIterator last,
    OutputIterator result);

template<class InputIterator, class OutputIterator, class BinaryOperation>
OutputIterator inclusive_scan(
    InputIterator first,
    InputIterator last,
    OutputIterator result,
    BinaryOperation binary_op);

template<class InputIterator, class OutputIterator, class BinaryOperation, class Type>
OutputIterator inclusive_scan(
    InputIterator first,
    InputIterator last,
    OutputIterator result,
    BinaryOperation binary_op,
    Type init);

template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2>
ForwardIterator2 inclusive_scan(
    ExecutionPolicy&& exec,
    ForwardIterator1 first,
    ForwardIterator1 last,
    ForwardIterator2 result);

template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2,
class BinaryOperation>
ForwardIterator2 inclusive_scan(
    ExecutionPolicy&& exec,
    ForwardIterator1 first,
    ForwardIterator1 last,
    ForwardIterator2 result,
    BinaryOperation binary_op);

template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2,
class BinaryOperation, class Type>
ForwardIterator2 inclusive_scan(
    ExecutionPolicy&& exec,
    ForwardIterator1 first,
    ForwardIterator1 last,
    ForwardIterator2 result,
    BinaryOperation binary_op,
    Type init);

Parameter

Exec
Kebijakan eksekusi.

first
Iterator input yang membahas elemen pertama dalam rentang untuk menjumlahkan atau menggabungkan dengan menggunakan binary_op.

last
Iterator input yang menangani elemen terakhir dalam rentang untuk menjumlahkan atau menggabungkan dengan menggunakan binary_op, itu adalah satu posisi di luar elemen akhir yang benar-benar disertakan dalam akumulasi iterasi.

result
Iterator output yang membahas elemen pertama rentang tujuan di mana rangkaian jumlah atau hasil operasi yang ditentukan akan disimpan.

init
Nilai awal di mana setiap elemen pada gilirannya ditambahkan atau dikombinasikan dengan menggunakan binary_op.

binary_op
Operasi biner untuk diterapkan ke setiap elemen dalam rentang yang ditentukan dan hasil aplikasi sebelumnya.

Nilai hasil

Iterator output yang membahas akhir rentang tujuan: hasil + (terakhir - terlebih dahulu).

inner_product

Menghitung jumlah produk yang bijaksana elemen dari dua rentang dan menambahkannya ke nilai awal tertentu atau menghitung hasil prosedur umum di mana jumlah dan operasi biner produk digantikan oleh operasi biner tertentu lainnya.

template <class InputIterator1, class InputIterator2, class Type>
Type inner_product(
    InputIterator1   first1,
    InputIterator1   last1,
    InputIterator2   first2,
    Type             init);

template <class InputIterator1, class InputIterator2, class Type, class BinaryOperation1, class BinaryOperation2>
Type inner_product(
    InputIterator1   first1,
    InputIterator1   last1,
    InputIterator2   first2,
    Type             init,
    BinaryOperation1 binary_op1,
    BinaryOperation2 binary_op2);

Parameter

pertama1
Iterator input yang menangani elemen pertama dalam rentang pertama yang produk dalamnya atau produk dalam umum dengan rentang kedua akan dihitung.

last1
Iterator input yang membahas elemen terakhir dalam rentang pertama yang produk dalamnya atau produk dalam umum dengan rentang kedua akan dihitung.

pertama2
Iterator input yang membahas elemen pertama dalam rentang kedua yang produk dalamnya atau produk dalam umum dengan rentang pertama akan dihitung.

init
Nilai awal di mana produk dalam atau produk dalam umum antara rentang akan ditambahkan.

binary_op1
Operasi biner yang menggantikan operasi produk dalam jumlah yang diterapkan pada produk elemen bijaksana dalam generalisasi produk dalam.

binary_op2
Operasi biner yang menggantikan operasi elemen produk dalam perkalian dalam generalisasi produk dalam.

Nilai hasil

Fungsi anggota pertama mengembalikan jumlah produk yang bijaksana elemen dan menambahkan ke dalamnya nilai awal yang ditentukan. Jadi untuk rentang nilai ai dan bi, nilai tersebut mengembalikan:

init + (a1 * b1) + (a2 * b2) + ... + (n* bn)

dengan secara berulang mengganti init dengan init + (ai * bi).

Fungsi anggota kedua mengembalikan:

initbinary_op1 (1 binary_op2b1) binary_op1 (2 binary_op2b2) binary_op1 ... binary_op1 (n binary_op2bn)

dengan secara berulang mengganti init dengan initbinary_op1 (ai binary_op2bi).

Keterangan

Nilai awal memastikan bahwa ada hasil yang terdefinisi dengan baik saat rentang kosong. Dalam hal ini, init dikembalikan. Operasi biner tidak perlu asosiatif atau komutatif. Rentang harus valid, dan kompleksitasnya linier dengan ukuran rentang. Jenis pengembalian operator biner harus dapat dikonversi ke Jenis untuk memastikan penutupan selama iterasi.

Contoh

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

int main()
{
   using namespace std;

   vector <int> v1, v2(7), v3(7);
   vector <int>::iterator iter1, iter2, iter3;

   int i;
   for (i = 1; i <= 7; i++)
   {
      v1.push_back(i);
   }

   cout << "The original vector v1 is:\n ( " ;
   for (iter1 = v1.begin(); iter1 != v1.end(); iter1++)
      cout << *iter1 << " ";
   cout << ")." << endl;

   list <int> l1, l2(7);
   list <int>::iterator lIter1, lIter2;

   int t;
   for (t = 1; t <= 7; t++)
   {
      l1.push_back(t);
   }

   cout << "The original list l1 is:\n ( " ;
   for (lIter1 = l1.begin(); lIter1 != l1.end(); lIter1++)
      cout << *lIter1 << " ";
   cout << ")." << endl;

   // The first member function for the inner product
   int inprod;
   inprod = inner_product(v1.begin(), v1.end(), l1.begin(), 0);

   cout << "The inner_product of the vector v1 and the list l1 is: "
        << inprod << "." << endl;

   // Constructing a vector of partial inner_products between v1 & l1
   int j = 0, parinprod;
   for (iter1 = v1.begin(); iter1 != v1.end(); iter1++) {
      parinprod = inner_product(v1.begin(), iter1 + 1, l1.begin(), 0);
      v2[j] = parinprod;
      j++;
   }

   cout << "Vector of partial inner_products between v1 & l1 is:\n ( " ;
   for (iter2 = v2.begin(); iter2 != v2.end(); iter2++)
      cout << *iter2 << " ";
   cout << ")." << endl << endl;

   // The second member function used to compute
   // the product of the element-wise sums
   int inprod2;
   inprod2 = inner_product (v1.begin(), v1.end(),
      l1.begin(), 1, multiplies<int>(), plus<int>());

   cout << "The sum of the element-wise products of v1 and l1 is: "
        << inprod2 << "." << endl;

   // Constructing a vector of partial sums of element-wise products
   int k = 0, parinprod2;
   for (iter1 = v1.begin(); iter1 != v1.end(); iter1++)
   {
      parinprod2 =
         inner_product(v1.begin(), iter1 + 1, l1.begin(), 1,
         multiplies<int>(), plus<int>());
      v3[k] = parinprod2;
      k++;
   }

   cout << "Vector of partial sums of element-wise products is:\n ( " ;
   for (iter3 = v3.begin(); iter3 != v3.end(); iter3++)
      cout << *iter3 << " ";
   cout << ")." << endl << endl;
}

Iota

Menyimpan nilai awal, dimulai dengan elemen pertama dan mengisi dengan kenaikan berturut-turut dari nilai tersebut (value++) di setiap elemen dalam interval [first, last).

template <class ForwardIterator, class Type>
void iota(ForwardIterator first, ForwardIterator last, Type value);

Parameter

first
Iterator input yang membahas elemen pertama dalam rentang yang akan diisi.

last
Iterator input yang membahas elemen terakhir dalam rentang yang akan diisi.

value
Nilai awal untuk disimpan di elemen pertama dan secara berturut-turut kenaikan untuk elemen selanjutnya.

Contoh

Contoh berikut menunjukkan beberapa kegunaan untuk iota fungsi dengan mengisi daftar bilangan bulat lalu mengisi vektor dengan list sehingga fungsi random_shuffle dapat digunakan.

// compile by using: cl /EHsc /nologo /W4 /MTd
#include <algorithm>
#include <numeric>
#include <list>
#include <vector>
#include <iostream>

using namespace std;

int main(void)
{
    list <int> intList(10);
    vector <list<int>::iterator> intVec(intList.size());

    // Fill the list
    iota(intList.begin(), intList.end(), 0);

    // Fill the vector with the list so we can shuffle it
    iota(intVec.begin(), intVec.end(), intList.begin());

    random_shuffle(intVec.begin(), intVec.end());

    // Output results
    cout << "Contents of the integer list: " << endl;
    for (auto i: intList) {
        cout << i << ' ';
    }
    cout << endl << endl;

    cout << "Contents of the integer list, shuffled by using a vector: " << endl;
    for (auto i: intVec) {
        cout << *i << ' ';
    }
    cout << endl;
}

Lcm

template <class M, class N>
constexpr common_type_t<M,N> lcm(M m, N n);

partial_sum

Menghitung serangkaian jumlah dalam rentang input dari elemen pertama melalui elemen nth dan menyimpan hasil dari setiap jumlah tersebut dalam elemen nth dari rentang tujuan. Atau, menghitung hasil prosedur umum di mana operasi penjumlahan digantikan oleh operasi biner lain yang ditentukan.

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

Parameter

first
Iterator input yang menangani elemen pertama dalam rentang yang akan dijumlahkan sebagian atau digabungkan sesuai dengan operasi biner yang ditentukan.

last
Iterator input yang menangani elemen terakhir dalam rentang yang akan dijumlahkan sebagian atau digabungkan sesuai dengan operasi biner tertentu yang merupakan satu posisi di luar elemen akhir yang benar-benar termasuk dalam akumulasi berulang.

result
Iterator output yang membahas elemen pertama dari rentang tujuan untuk menyimpan rangkaian jumlah parsial, atau hasil berturut-turut dari operasi biner yang ditentukan.

binary_op
Operasi biner untuk diterapkan dalam operasi umum, menggantikan operasi jumlah dalam prosedur penjumlahan parsial.

Nilai hasil

Iterator output yang membahas akhir rentang tujuan: hasil + (terakhir - terlebih dahulu).

Keterangan

Hasil iterator output diizinkan untuk menjadi iterator yang sama dengan iterator input terlebih dahulu, sehingga jumlah parsial dapat dihitung di tempat.

Untuk urutan nilai 1, 2, ... x, dalam rentang input, fungsi templat pertama menyimpan jumlah parsial berturut-turut dalam rentang tujuan. Elemen nth diberikan oleh (1 + a2 + a3 + ... + n).

Untuk urutan nilai 1, 2, 3, dalam rentang input, fungsi templat kedua menyimpan hasil parsial berturut-turut dalam rentang tujuan. Elemen nth diberikan oleh (... ((a1 binary_op2) binary_op3) binary_op ... ) binary_op n).

Operasi biner binary_op tidak diperlukan untuk asosiatif atau komutatif, karena urutan operasi yang diterapkan ditentukan.

Contoh

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

reduce

Mengurangi semua elemen dalam rentang tertentu, mungkin termasuk beberapa nilai awal, dengan menghitung jumlah dalam urutan yang semena-mena dan mungkin dirujuk. Atau, mengurangi dengan menghitung hasil operasi biner tertentu. Kelebihan beban yang menyertakan argumen kebijakan eksekusi dijalankan sesuai dengan kebijakan yang ditentukan.

template<class InputIterator>
typename iterator_traits<InputIterator>::value_type reduce(
    InputIterator first,
    InputIterator last);

template<class InputIterator, class Type>
Type reduce(
    InputIterator first,
    InputIterator last,
    Type init);

template<class InputIterator, class Type, class BinaryOperation>
Type reduce(
    InputIterator first,
    InputIterator last,
    Type init,
    BinaryOperation binary_op);

template<class ExecutionPolicy, class ForwardIterator>
typename iterator_traits<ForwardIterator>::value_type reduce(
    ExecutionPolicy&& exec,
    ForwardIterator first,
    ForwardIterator last);

template<class ExecutionPolicy, class ForwardIterator, class Type>
Type reduce(
    ExecutionPolicy&& exec,
    ForwardIterator first,
    ForwardIterator last,
    Type init);

template<class ExecutionPolicy, class ForwardIterator, class Type, class BinaryOperation>
Type reduce(
    ExecutionPolicy&& exec,
    ForwardIterator first,
    ForwardIterator last,
    Type init,
    BinaryOperation binary_op);

Parameter

Exec
Kebijakan eksekusi.

first
Iterator input yang membahas elemen pertama dalam rentang untuk menjumlahkan atau menggabungkan dengan menggunakan binary_op.

last
Iterator input yang menangani elemen terakhir dalam rentang untuk menjumlahkan atau menggabungkan dengan menggunakan binary_op, itu adalah satu posisi di luar elemen akhir yang benar-benar disertakan dalam akumulasi iterasi.

result
Iterator output yang membahas elemen pertama rentang tujuan di mana rangkaian jumlah atau hasil operasi yang ditentukan akan disimpan.

init
Nilai awal di mana setiap elemen pada gilirannya ditambahkan atau dikombinasikan dengan menggunakan binary_op.

binary_op
Operasi biner untuk diterapkan ke setiap elemen dalam rentang yang ditentukan dan hasil aplikasi sebelumnya.

Nilai hasil

Hasil penerapan binary_op atau ke init dan semua elemen dalam rentang yang ditentukan ke (*PartialResult, in_iter), di mana PartialResult adalah hasil dari aplikasi operasi sebelumnya, dan in_iter adalah iterator yang menunjuk ke beberapa elemen dalam rentang.std::plus<>() Dalam kelebihan beban yang tidak menentukan init, nilai init yang digunakan setara dengan typename iterator_traits<InputIterator>::value_type{}.

Keterangan

reduce perilaku tidak deterministik kecuali binary_op asosiatif dan komutatif. Perilaku tidak terdefinisi jika binary_op memodifikasi elemen apa pun, atau membatalkan iterator apa pun dalam interval [pertama, terakhir], inklusif.

transform_exclusive_scan

Mengubah elemen rentang dengan operator unary tertentu, lalu menghitung operasi penjumlahan awalan eksklusif dengan menggunakan std::plus<>() operator biner atau yang ditentukan di atas rentang, dengan nilai awal. Menulis hasil ke rentang yang dimulai pada tujuan yang ditentukan. Jumlah awalan eksklusif berarti elemen input nth tidak disertakan dalam jumlah nth. Kelebihan beban yang menyertakan argumen kebijakan eksekusi dijalankan sesuai dengan kebijakan yang ditentukan. Penjumlahan dapat dilakukan dalam urutan arbitrer.

template<class InputIterator, class OutputIterator, class Type, class BinaryOperation, class UnaryOperation>
OutputIterator transform_exclusive_scan(
    InputIterator first,
    InputIterator last,
    OutputIterator result,
    Type init,
    BinaryOperation binary_op,
    UnaryOperation unary_op);

template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class Type, class BinaryOperation, class UnaryOperation>
ForwardIterator2 transform_exclusive_scan(
    ExecutionPolicy&& exec,
    ForwardIterator1 first,
    ForwardIterator1 last,
    ForwardIterator2 result,
    Type init,
    BinaryOperation binary_op,
    UnaryOperation unary_op);

Parameter

Exec
Kebijakan eksekusi.

first
Iterator input yang membahas elemen pertama dalam rentang untuk menjumlahkan atau menggabungkan dengan menggunakan binary_op.

last
Iterator input yang menangani elemen terakhir dalam rentang untuk menjumlahkan atau menggabungkan dengan menggunakan binary_op, itu adalah satu posisi di luar elemen akhir yang benar-benar disertakan dalam akumulasi iterasi.

result
Iterator output yang membahas elemen pertama rentang tujuan di mana rangkaian jumlah atau hasil operasi yang ditentukan akan disimpan.

init
Nilai awal di mana setiap elemen pada gilirannya ditambahkan atau dikombinasikan dengan menggunakan binary_op.

binary_op
Operasi biner untuk diterapkan ke setiap elemen dalam rentang yang ditentukan dan hasil aplikasi sebelumnya.

unary_op
Operasi unary untuk diterapkan ke setiap elemen dalam rentang yang ditentukan.

transform_inclusive_scan

Mengubah elemen rentang dengan operator unary tertentu, lalu menghitung operasi penjumlahan awalan inklusif dengan menggunakan operator std::plus<>() biner tertentu di atas rentang, dengan nilai awal. Menulis hasil ke rentang yang dimulai pada tujuan yang ditentukan. Jumlah awalan inklusif berarti elemen input nth disertakan dalam jumlah nth. Kelebihan beban yang menyertakan argumen kebijakan eksekusi dijalankan sesuai dengan kebijakan yang ditentukan. Penjumlahan dapat dilakukan dalam urutan arbitrer.

template<class InputIterator, class OutputIterator, class BinaryOperation, class UnaryOperation>
OutputIterator transform_inclusive_scan(
    InputIterator first,
    InputIterator last,
    OutputIterator result,
    BinaryOperation binary_op,
    UnaryOperation unary_op);

template<class InputIterator, class OutputIterator, class BinaryOperation, class UnaryOperation, class Type>
OutputIterator transform_inclusive_scan(
    InputIterator first,
    InputIterator last,
    OutputIterator result,
    BinaryOperation binary_op,
    UnaryOperation unary_op,
    Type init);

template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryOperation, class UnaryOperation>
ForwardIterator2 transform_inclusive_scan(
    ExecutionPolicy&& exec,
    ForwardIterator1 first,
    ForwardIterator1 last,
    ForwardIterator2 result,
    BinaryOperation binary_op,
    UnaryOperation unary_op);

template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class BinaryOperation, class UnaryOperation, class Type>
ForwardIterator2 transform_inclusive_scan(
    ExecutionPolicy&& exec,
    ForwardIterator1 first,
    ForwardIterator1 last,
    ForwardIterator2 result,
    BinaryOperation binary_op,
    UnaryOperation unary_op,
    Type init);

Parameter

Exec
Kebijakan eksekusi.

first
Iterator input yang membahas elemen pertama dalam rentang untuk menjumlahkan atau menggabungkan dengan menggunakan binary_op.

last
Iterator input yang menangani elemen terakhir dalam rentang untuk menjumlahkan atau menggabungkan dengan menggunakan binary_op, itu adalah satu posisi di luar elemen akhir yang benar-benar disertakan dalam akumulasi iterasi.

result
Iterator output yang membahas elemen pertama rentang tujuan di mana rangkaian jumlah atau hasil operasi yang ditentukan akan disimpan.

binary_op
Operasi biner untuk diterapkan ke setiap elemen dalam rentang yang ditentukan dan hasil aplikasi sebelumnya.

unary_op
Operasi unary untuk diterapkan ke setiap elemen dalam rentang yang ditentukan.

init
Nilai awal di mana setiap elemen pada gilirannya ditambahkan atau dikombinasikan dengan menggunakan binary_op.

transform_reduce

Mengubah berbagai elemen, lalu menerapkan funktor yang mengurangi elemen yang diubah dalam urutan arbitrer. Secara efektif, transform diikuti oleh reduce.

template<class InputIterator1, class InputIterator2, class Type>
Type transform_reduce(
    InputIterator1 first1,
    InputIterator1 last1,
    InputIterator2 first2,
    Type init);

template<class InputIterator1, class InputIterator2, class Type, class BinaryOperation1, class BinaryOperation2>
Type transform_reduce(
    InputIterator1 first1,
    InputIterator1 last1,
    InputIterator2 first2,
    Type init,
    BinaryOperation1 binary_op1,
    BinaryOperation2 binary_op2);

template<class InputIterator, class Type, class BinaryOperation, class UnaryOperation>
Type transform_reduce(
    InputIterator first,
    InputIterator last,
    Type init,
    BinaryOperation binary_op,
    UnaryOperation unary_op);

template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class Type>
Type transform_reduce(
    ExecutionPolicy&& exec,
    ForwardIterator1 first1,
    ForwardIterator1 last1,
    ForwardIterator2 first2,
    Type init);

template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class Type, class BinaryOperation1, class BinaryOperation2>
Type transform_reduce(
    ExecutionPolicy&& exec,
    ForwardIterator1 first1,
    ForwardIterator1 last1,
    ForwardIterator2 first2,
    Type init,
    BinaryOperation1 binary_op1,
    BinaryOperation2 binary_op2);

template<class ExecutionPolicy, class ForwardIterator, class Type, class BinaryOperation, class UnaryOperation>
Type transform_reduce(
    ExecutionPolicy&& exec,
    ForwardIterator first,
    ForwardIterator last,
    Type init,
    BinaryOperation binary_op,
    UnaryOperation unary_op);

Parameter

Exec
Kebijakan eksekusi.

first
Iterator input yang membahas elemen pertama dalam rentang untuk menjumlahkan atau menggabungkan dengan menggunakan binary_op.

pertama1
Iterator input yang menangani elemen pertama dalam rentang untuk menjumlahkan atau menggabungkan dengan menggunakan binary_op1.

last
Iterator input yang menangani elemen terakhir dalam rentang untuk menjumlahkan atau menggabungkan dengan menggunakan binary_op, itu adalah satu posisi di luar elemen akhir yang benar-benar disertakan dalam akumulasi iterasi.

last1
Iterator input yang membahas elemen terakhir dalam rentang untuk menjumlahkan atau menggabungkan dengan menggunakan binary_op1, itu adalah satu posisi di luar elemen akhir yang benar-benar disertakan dalam akumulasi iterasi.

result
Iterator output yang membahas elemen pertama rentang tujuan di mana rangkaian jumlah atau hasil operasi yang ditentukan akan disimpan.

init
Nilai awal di mana setiap elemen pada gilirannya ditambahkan atau dikombinasikan dengan menggunakan binary_op.

binary_op
Operasi biner untuk diterapkan ke setiap elemen dalam rentang yang ditentukan dan hasil aplikasi sebelumnya.

unary_op
Operasi unary untuk diterapkan ke setiap elemen dalam rentang yang ditentukan.

Nilai hasil

Hasil yang diubah kemudian dikurangi.