accumulate 函数是 C++ 标准库中 <numeric> 头文件的一部分,主要用于计算给定范围内元素的累积和或其他累积操作。

基本用法

accumulate 函数的原型如下:

1
2
3
4
5
template <class InputIterator, class T>
T accumulate (InputIterator first, InputIterator last, T init);

template <class InputIterator, class T, class BinaryOperation>
T accumulate (InputIterator first, InputIterator last, T init, BinaryOperation binary_op);
  • firstlast:确定要处理的元素范围的迭代器。
  • init:累积的初始值。
  • binary_op(可选):一个二元操作,用于替代默认的加法操作。

特点和注意事项

  1. 默认行为:在不提供 binary_op 的情况下,默认执行加法操作。
  2. 自定义操作:通过提供 binary_op,可以执行任何二元操作,如乘法、最大值等。
  3. 类型匹配init 的类型应与容器元素类型兼容,否则可能导致意外的结果或编译错误。
  4. 性能:这是一个线性时间复杂度的操作,因为它遍历整个范围。

示例代码

以下是使用 accumulate 的一个示例,展示了基本的累加操作和自定义操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <vector>
#include <numeric>

int main() {
std::vector<int> nums = {1, 2, 3, 4, 5};

// 默认累加
int sum = std::accumulate(nums.begin(), nums.end(), 0);
std::cout << "Sum: " << sum << std::endl;

// 使用自定义操作(乘法)
int product = std::accumulate(nums.begin(), nums.end(), 1, std::multiplies<int>());
std::cout << "Product: " << product << std::endl;

return 0;
}

在这个例子中,第一个 accumulate 调用计算了 nums 的总和,而第二个调用使用了乘法操作来计算所有元素的乘积。


本站由 @anonymity 使用 Stellar 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。