资讯详情

C++ accumulate函数介绍及具体案例

一、简单介绍函数

accumulate是numeric图书馆中的一个函数主要用于在指定范围内寻求和平,但也指定了其他一些操作,如范围内的所有元素相乘、相除等。

使用前需要引入相应的头文件。

#include <numeric> 
  • 函数有四个参数,其中前三个是必须的,第四个是不必要的。

  • 若不指定第四个参数,则默认累加范围内的元素。

accumulate(起始迭代器, 结束迭代器, 初始值, 定制操作函数) 

二、具体使用场景

1. 计算数组中所有元素的和

#include <iostream> #include <vector> #include <numeric> using namespace std;  int main() { 
             vector<int> arr{ 
        1, 2, 3, 4, 5, 6, 7, 8, 9, 10};     int sum = accumulate(arr.begin(), arr.end(), 0); // 初值0 (1 2 3 4 ... 10)     cout << sum << endl; // 输出55     return 0; } 

2. 计算数组中所有元素的乘积

乘法函数需要指定第四个参数 multiplies<type>(), type根据元素的类型进行选择。

#include <iostream> #include <vector> #include 
        
         <numeric>
        

using namespace std;

int main() { 
        
    vector<int> arr{ 
        1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int sum = accumulate(arr.begin(), arr.end(), 1, multiplies<int>()); // 初值1 * (1 * 2 * 3 * 4 *... * 10)
    cout << sum << endl;	// 输出3628800
    return 0;
}

3. 计算数组中每个元素乘以3之后的和

#include <iostream>
#include <vector>
#include <numeric>

using namespace std;

int fun(int acc, int num) { 
        
    return acc + num * 3;     // 计算数组中每个元素乘以3
}

int main() { 
        
    vector<int> arr{ 
        1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int sum = accumulate(arr.begin(), arr.end(), 0, fun);
    cout << sum << endl;	// 输出 165
    return 0;
}

4.计算数组中每个元素减去3之后的和

#include <iostream>
#include <vector>
#include <numeric>

using namespace std;

int fun(int acc, int num) { 
        
    return acc + (num - 3) ;     // 计算数组中每个元素减去3之后的和
}

int main() { 
        
    vector<int> arr{ 
        1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int sum = accumulate(arr.begin(), arr.end(), 0, fun);
    cout << sum << endl;    // 输出25
    return 0;
}

5.计算班级内学生的平均分

#include <iostream>
#include <vector>
#include <numeric>

using namespace std;

struct Student { 
        
    string name;
    int score;
    Student() { 
        };   // 无参构造函数
    Student(string name, int score) : name(name), score(score) { 
        };  // 有参构造函数
};

int fun(int acc, Student b) { 
        
    return a + b.score;
}

int main() { 
        
    vector<Student> arr;
    arr.emplace_back("Alice", 82);
    arr.emplace_back("Bob", 91);
    arr.emplace_back("Lucy", 85);
    arr.emplace_back("Anna", 60);
    arr.emplace_back("June", 73);
    int avg_score = accumulate(arr.begin(), arr.end(), 0, fun) / arr.size();	// 总分/学生数
    cout << avg_score << endl;
    return 0;
}

三、参考文章

https://cplusplus.com/reference/numeric/accumulate/

标签: 300kg传感器accu

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台