目录
常用算术算法简介:
- accumulate 计算容器元素累计总和
- fill 向容器中添加元素
属于小型算法,使用时需要头文件 <numeric>
accumulate
功能:
- 计算区间内容器元素累计总和
函数原型:
accumulate(iterator beg, iterator end, value);
beg —— 开始迭代器
end —— 结束迭代器
value —— 起始值(额外累计值,不需要可以为 0)
测试代码:
#include<iostream>
#include<vector>
#include<string>
#include<numeric>
using namespace std;
class Person {
public:
Person(string name, int age) :m_Name(name), m_Age(age) {}
string m_Name;
int m_Age;
};
class myAdd {
public:
int operator()(const int age, const Person& p) {
return (age + p.m_Age);
}
};
// 内置数据类型
void test01() {
vector<int>v;
for (int i = 0; i <= 100; ++i) {
v.push_back(i);
}
int sum = accumulate(v.begin(), v.end(), 0);
cout << sum << endl; // 5050
}
// 自定义数据类型
void test02() {
vector<Person>v;
Person p1("A", 10);
Person p2("B", 20);
Person p3("C", 30);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
int sum = accumulate(v.begin(), v.end(), 0, myAdd());
cout << sum << endl; // 60
}
int main() {
test01();
test02();
system("pause");
return 0;
}
运行结果:
fill
功能:
- 向容器中填充指定的元素
函数原型:
fill(iterator beg, iterator end, value);
beg —— 开始迭代器
end —— 结束迭代器
value —— 填充的值
测试代码:
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<numeric>
using namespace std;
class Person {
public:
Person(string name, int age) :m_Name(name), m_Age(age) {}
string m_Name;
int m_Age;
};
ostream& operator<<(ostream& cout, const Person& p) {
cout << p.m_Name << " " << p.m_Age << endl;
return cout;
}
template<typename T>
void PrintVector(const T& x) {
cout << x << " ";
}
void test01() {
vector<int>v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.resize(10);
// 后期填充
fill(v.begin(), v.end(), 50);
for_each(v.begin(), v.end(), PrintVector<int>);
cout << endl;
}
// 自定义数据类型
void test02() {
vector<Person>v;
Person p1("A", 19);
Person p2("B", 20);
Person p3("C", 17);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
Person fill_p("D", 100);
fill(v.begin(), v.end(), fill_p);
for_each(v.begin(), v.end(), PrintVector<Person>);
}
int main() {
test01();
test02();
system("pause");
return 0;
}
运行结果: