一:for_each
1.函数原型
for_each(iterator begin, iterator end, _func)
2.操作
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void op1(int val)
{//普通函数
cout << val << endl;
}
struct op2
{//仿函数
void operator()(int val)
{
cout << val << endl;
}
};
int main()
{
vector<int> v{ 1,2,3,4 };
vector<int> v1;
for_each(v.begin(), v.end(), op1);
for_each(v.begin(), v.end(), op2());
}
二:transform
1.函数原型
transform(iterator begin, iterator end, iterator begin2, _func)
transform(iterator begin, iterator end, iterator begin2, iterator begin3, _func)
2.1对1:将一个容器元素经op操作转移到另一个容器,不改变原容器元素
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
char op3(char c)
{//大写转小写
if (c >= 'A' && c<='Z')
{
return c + 32;
}
else
{
return c;
}
}
int main()
{
vector<char> v2{ 'A', 'B' };
vector<char> v3;
v3.resize(v2.size());
transform(v2.begin(), v2.end(), v3.begin(), op3);
}
//v2:'A','B'
//v3:'a','b'
3.2对1:两个容器元素经op操作转移到一个新容器,不改变原容器元素
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int op4(int m, int n)
{
return m * n;
}
int main()
{
vector<int> v4{ 1,2,3,4 };
vector<int> v5{ 1,2,3,4 };
//v4和v5的size必须一致
vector<int> v6;
v6.resize(v4.size());
transform(v4.begin(), v4.end(), v5.begin(), v6.begin(), op4);
}
//v6:1,4,9,16
注意:输入两个容器的size必须一致。