Поделиться через


accumulate, copy, и vector::push_back

Демонстрируется использование накапливание" копияи вектор:: push_back Стандартные функции библиотеки стандартных шаблонов (STL) в Visual C++.

template<class InputIterator, class _TYPE> inline
   _TYPE accumulate(
      InputIterator First, 
      InputIterator Last, 
      _TYPE Init
   )
template<class InputIterator, class _TYPE, class BinaryOperator> inline
   _TYPE accumulate(
      InputIterator First, 
      InputIterator Last, 
      _TYPE Init, 
      BinaryOperator Binary_Op
   )

Заметки

ПримечаниеПримечание

Имена класса и параметра в прототипе не соответствует версии в файле заголовка.Некоторые были изменены для улучшения удобочитаемости.

накапливание функция STL инициализирует аккумулятор acc с init начального значения и затем изменяет его с acc = acc + *i OR acc = Binary_Op(accвыберите *iдля каждого итератора) i в диапазоне [First" Last) в указанном порядке.Обычно accumulate Функция STL используется для суммирования числовые элементы вектора.Однако ее можно также использовать для выполнения другой полезный способ сцепления строк работы вектор.

Пример

// accumulate.cpp
// compile with: /EHsc
//
// Description of accumulate(first,last,init)
//                accumulate(first,last,init,binary_op):
//
//    Initializes the accumulator acc with the initial value init
//        acc = init
//    and then modifies it with
//        acc  =  acc + *i
//    or
//        acc = binary_op(acc, *i)
//    for every iterator i in the range [first, last) in order.

// turn off warning about symbols too long for debugger
#pragma warning (disable : 4786)

#include <iostream>
#include <numeric>
#include <functional>
#include <vector>
#include <iterator>
#include <string>

using namespace std;


typedef vector < float > FloatArray;
typedef vector < string > StringArray;
typedef ostream_iterator <float, char, char_traits <char> > FloatOstreamIt;

int main ()
{
    // a vector of floats
    FloatArray rgFA;

    // an ostream iterator that outputs a float to cout terminated
    // by a space
    FloatOstreamIt OstreamIt(cout," ");

    // Initialize the array to 1,1/2,1/3,...
    for (int i=0; i<10; i++) rgFA.push_back(1.0f/(i+1));

    // Print the array
    copy(rgFA.begin(),rgFA.end(),OstreamIt);
    cout << endl;

    // Sum the array
    cout << "The sum of 1 + 1/2 + 1/3 + ... + 1/10 is "
         << accumulate(rgFA.begin(),rgFA.end(),0.0f)
         << endl;

    // Compute the product of the array
    cout << "The product of 1 * 1/2 * 1/3 * ... * 1/10 is "
         << accumulate(rgFA.begin(),rgFA.end(),1.0f,multiplies<float>())
         << endl;

    // Initialize array of strings
    StringArray rgs;
    rgs.push_back("This ");
    rgs.push_back("is ");
    rgs.push_back("one ");
    rgs.push_back("sentence. ");

    // Concatenate the strings in the array and print the sentence
    cout << "The concatenated vector of strings: "
         << accumulate(rgs.begin(),rgs.end(),string(""))
         << endl;
}

Output

1 0.5 0.333333 0.25 0.2 0.166667 0.142857 0.125 0.111111 0.1 
The sum of 1 + 1/2 + 1/3 + ... + 1/10 is 2.92897
The product of 1 * 1/2 * 1/3 * ... * 1/10 is 2.75573e-007
The concatenated vector of strings: This is one sentence. 

Требования

заголовок:<numeric>

См. также

Основные понятия

Образец библиотеки стандартных шаблонов