for_each //遍历容器
transform //搬运容器到另一个容器中
1.for_each:遍历容器
// 常用遍历算法:for_each /* for_each(iterator beg, iterator end, _func); // 遍历算法 遍历容器元素 // beg 开始迭代器 // end 结束迭代器 // _func 函数或者函数对象 */ #include <bits/stdc++.h> using namespace std; // 普通函数 void print01(int val) { cout << val << " "; } // 仿函数 class print02 { public: void operator()(int val) { cout << val << " "; } }; void test01() { vector<int> v; for (int i = 0; i < 10; i++) { v.push_back(i); } for_each(v.begin(), v.end(), print01); // 普通函数用函数名 0 1 2 3 4 5 6 7 8 9 cout << endl; for_each(v.begin(), v.end(), print02()); // 仿函数加括号 0 1 2 3 4 5 6 7 8 9 } int main() { test01(); } /* 总结: for_each在实际开发中是最常用遍历算法,需要熟练掌握 */
2.transform:搬运容器到另一个容器中
// 常用遍历算法:transform /* transform(iterator beg1, iterator end1, iterator beg2, _func); //beg1 源容器开始迭代器 //end1 源容器结束迭代器 //beg2 目标容器开始迭代器 //_func 函数或者函数对象(加减乘除运算) */ #include <bits/stdc++.h> using namespace std; // 仿函数 class transform1 { public: int operator()(int val) { return ++val; // 也可做运算后再return } }; class print { public: void operator()(int val) { cout << val << " "; } }; 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(), transform1()); // 仿函数加括号 for_each(v.begin(), v.end(), print()); // 0 1 2 3 4 5 6 7 8 9 cout << endl; for_each(vtarget.begin(), vtarget.end(), print()); // 1 2 3 4 5 6 7 8 9 10 } int main() { test01(); } /* 总结: 搬运的目标容器必须要提前开辟空间,否则无法正常搬运 */