datetime:2022/11/05 15:42
author:nzb
5 STL- 常用算法
概述
- 算法主要是由头文件
<algorithm>
<functional>
<numeric>
组成。 <algorithm>
是所有STL头文件中最大的一个,范围涉及到比较、 交换、查找、遍历操作、复制、修改等等<numeric>
体积很小,只包括几个在序列上面进行简单数学运算的模板函数<functional>
定义了一些模板类,用以声明函数对象。
5.5 常用算术生成算法
学习目标:掌握常用的算术生成算法
注意
- 算术生成算法属于小型算法,使用时包含的头文件为
#include <numeric>
算法简介
accumulate
// 计算容器元素累计总和fill
// 向容器中添加元素
5.5.1 accumulate
功能描述:计算区间内 容器元素累计总和
函数原型
accumulate(iterator beg, iterator end, value);
- 计算容器元素累计总和
beg
开始迭代器end
结束迭代器value
起始值
示例
#include <numeric>
#include <vector>
void test01()
{
vector<int> v;
for (int i = 0; i <= 100; i++) {
v.push_back(i);
}
int total = accumulate(v.begin(), v.end(), 0);
cout << "total = " << total << endl;
}
int main() {
test01();
system("pause");
return 0;
}
总结:accumulate使用时头文件注意是 numeric,这个算法很实用
5.5.2 fill
功能描述:向容器中填充指定的元素
函数原型
fill(iterator beg, iterator end, value);
- 向容器中填充元素
beg
开始迭代器end
结束迭代器value
填充的值
示例
#include <numeric>
#include <vector>
#include <algorithm>
class myPrint
{
public:
void operator()(int val)
{
cout << val << " ";
}
};
void test01()
{
vector<int> v;
v.resize(10);
//填充
fill(v.begin(), v.end(), 100);
for_each(v.begin(), v.end(), myPrint());
cout << endl;
}
int main() {
test01();
system("pause");
return 0;
}
总结:利用fill可以将容器区间内元素填充为 指定的值