Skip to content

Latest commit

 

History

History
83 lines (64 loc) · 1.8 KB

partial_sum.md

File metadata and controls

83 lines (64 loc) · 1.8 KB

#partial_sum

namespace std {
  template <class InputIterator, class OutputIterator>
    OutputIterator partial_sum(
      InputIterator first, InputIterator last,
      OutputIterator result);

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

##概要 1つのシーケンスの任意の範囲の値の部分和を計算する。 accumulate()は最終結果のみを得るが、partial_sum()は計算の途中結果のシーケンスを得る。

##パラメータ

first シーケンスの先頭
last シーケンスの終端
result 計算結果を出力するシーケンスの先頭
binary_op 部分和を求める処理

##戻り値 result + (last - first)

##計算量 Ο(2n)

##例

#include <numeric>
#include <iostream>
#include <array>

template <class Range>
void print(const Range& r)
{
  for (const auto& x : r) {
    std::cout << x << " --> ";
  }
  std::cout << "end" << std::endl;
}

int main()
{
  const std::array<double, 5> a = {.0,.2,.4,.6,.8};

  {
    std::array<double, 5> result;
    std::partial_sum(a.begin(), a.end(), result.begin());
    print(result);
  }

  {
    std::array<double, 5> result;
    std::partial_sum(a.begin(), a.end(), result.begin(),
                       [](double a, double b) { return 2 * a - b; });
    print(result);
  }
}
  • partial_sum[color ff0000]

###出力

0 --> 0.2 --> 0.6 --> 1.2 --> 2 --> end
0 --> -0.2 --> -0.8 --> -2.2 --> -5.2 --> end

##備考 この関数は、他の言語ではscanという名前で提供されている。