std::partial_sum

来自cppreference.com
< cpp‎ | algorithm

 
 
算法库
功能
原文:
Functions
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
修改序列操作
原文:
Non-modifying sequence operations
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
all_of
any_of
none_of
(C++11)
(C++11)
(C++11)
for_each
count
count_if
mismatch
equal
修改序列操作
原文:
Modifying sequence operations
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
分区操作
原文:
Partitioning operations
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
is_partitioned(C++11)
partition
partition_copy(C++11)
排序操作(排序的区间)
原文:
Sorting operations (on sorted ranges)
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
is_sorted(C++11)
is_sorted_until(C++11)
sort
二进制搜索操作(排序的区间)
原文:
Binary search operations (on sorted ranges)
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
设置操作(排序的区间)
原文:
Set operations (on sorted ranges)
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
堆的操作
原文:
Heap operations
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
最小/最大操作
原文:
Minimum/maximum operations
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
数字操作
原文:
Numeric operations
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
adjacent_difference
partial_sum
C库
原文:
C library
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
 
在头文件 <numeric> 中定义
template< class InputIt, class OutputIt >
OutputIt partial_sum( InputIt first, InputIt last, OutputIt d_first );
(1)
template< class InputIt, class OutputIt, class BinaryOperation >

OutputIt partial_sum( InputIt first, InputIt last, OutputIt d_first,

                      BinaryOperation op );
(2)
计算的部分和的范围[first, last)子范围中的元素,并且将它们写入到的范围内开始,d_first。使用operator+总结的第一个版本,第二个版本使用给定的二进制功能的op.
原文:
Computes the partial sums of the elements in the subranges of the range [first, last) and writes them to the range beginning at d_first. The first version uses operator+ to sum up the elements, the second version uses the given binary function op.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
相同的操作
原文:
Equivalent operation:
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
*(d_first)   = *first;
*(d_first+1) = *first + *(first+1);
*(d_first+2) = *first + *(first+1) + *(first+2);
*(d_first+3) = *first + *(first+1) + *(first+2) + *(first+3);
...

目录

[编辑] 参数

first, last -
元素的范围总和
原文:
the range of elements to sum
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
d_first -
的目标范围的开头
原文:
the beginning of the destination range
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
op - 被使用的二元函数对象。

该函数的签名应当等价于:

 Ret fun(const Type1 &a, const Type2 &b);

签名中并不需要有 const &
类型  Type1 必须能使类型 iterator_traits<InputIt>::value_type 的对象能够隐式转换为  Type1。类型  Type2 必须能使类型 InputIt 的对象能够 be dereferenced and then 隐式转换 to  Type2. The type  Ret must be such that an object of type iterator_traits<InputIt>::value_type can be assigned a value of type  Ret. ​

类型要求
-
InputIt 必须满足 InputIterator 的要求。
-
OutputIt 必须满足 OutputIterator 的要求。

[编辑] 返回值

迭代器写入过去的最后一个元素的元素.
原文:
Iterator to the element past the last element written.
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 复杂性

究竟(last - first) - 1应用程序的二进制运算
原文:
Exactly (last - first) - 1 applications of the binary operation
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 可能的实现

版本一
template<class InputIt, class OutputIt>
OutputIt partial_sum(InputIt first, InputIt last, 
                           OutputIt d_first)
{
    return std::partial_sum(first, last, d_first, 
                            std::plus<InputIt, InputIt>());
}
版本二
template<class InputIt, class OutputIt, class BinaryOperator>
OutputIt partial_sum(InputIt first, InputIt last, 
                           OutputIt d_first, BinaryOperation op)
{
    if (first == last) return d_first;
 
    typename std::iterator_traits<InputIt>::value_type sum = *first;
    *d_first = sum;
 
    while (++first != last) {
       sum = op(sum, *first);
       *++d_first = sum;
    }
    return ++d_first;
}

[编辑] 为例

#include <numeric>
#include <vector>
#include <iostream>
#include <iterator>
#include <functional>
int main()
{
    std::vector<int> v = {2,2,2,2,2,2,2,2,2,2};
 
    std::cout << "The first 10 even numbers are: ";
    std::partial_sum(v.begin(), v.end(), 
                     std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
 
    std::partial_sum(v.begin(), v.end(), v.begin(), std::multiplies<int>());
    std::cout << "The first 10 powers of 2 are: ";
    for(auto n: v) {
        std::cout << n << " ";
    }
    std::cout << '\n';
}

输出:

The first 10 even numbers are: 2 4 6 8 10 12 14 16 18 20 
The first 10 powers of 2 are: 2 4 8 16 32 64 128 256 512 1024

[编辑] 另请参阅

计算区间内相邻元素之间的差
(函数模板) [edit]
计算区间内元素的和
(函数模板) [edit]