for_each(iterator beg, iterator end, _callback);
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; #include <vector> #include <functional> #include <algorithm> //1.for_each普通遍历 struct myPrint01 { void operator()(int v) { cout << v << endl; } }; void test01() { vector<int>v; for (int i = 0; i < 10; i++) { v.push_back(i); } for_each(v.begin(), v.end(), myPrint01()); } //2.for_each可以保存内部记录 struct myPrint02 { void operator()(int v) { cout << v << endl; m_Count++; } int m_Count; }; void test02() { vector<int>v; for (int i = 0; i < 10; i++) { v.push_back(i); } //for_each做遍历的时候会返回函数对象 myPrint02 print2 = for_each(v.begin(), v.end(), myPrint02()); cout << print2.m_Count << endl; } //3.for_each可以绑定参数进行输出 struct myPrint03:public binary_function<int,int,void> { void operator()(int v, int start)const { cout << v + start << endl; } }; void test03() { vector<int>v; for (int i = 0; i < 10; i++) { v.push_back(i); } for_each(v.begin(), v.end(), bind2nd(myPrint03(), 1000)); }
transform(iterator beg1, iterator end1, iterator beg2, _callbakc)
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; #include <vector> #include <algorithm> #include <functional> //1.搬运 把一个容器内的数据搬运到另一个容器中 struct Transform { int operator()(int v) { return v + 10; //搬运过程中给源容器每个数据+10 } }; void test01() { vector<int>v; //源容器 for (int i = 0; i < 10; i++) { v.push_back(i); } vector<int> vTarget;//目标容器 vTarget.resize(v.size()); //重要 一定要给目标容器分配内存 transform(v.begin(), v.end(), vTarget.begin(), Transform()); //搬运的同时修改每个成员的值 for_each(vTarget.begin(), vTarget.end(), [](int v) { cout << v << endl; }); } //2.把两个容器内的数据 一起搬运到第三个容器内 可以加逻辑运算 struct Transform02 { int operator()(int v1, int v2) { return v1 + v2; } }; void test02() { vector<int>v1; //源容器 vector<int>v2; //源容器 for (int i = 0; i < 10; i++) { v1.push_back(i + 100); v2.push_back(i + 200); } vector<int> vTar; //目标容器 vTar.resize(v1.size()); transform(v1.begin(), v1.end(), v2.begin(), vTar.begin(), Transform02()); for_each(vTar.begin(), vTar.end(), [](int v) {cout << v << endl; }); } int main() { test02(); //test01(); system("Pause"); return 0; }
结果:
原文:https://www.cnblogs.com/yifengs/p/15196302.html