一、什么是applies
applies是一种C++ STL算法,它可以将特定函数应用于迭代器范围内的每个元素。这个函数可以是一个全局函数、一个成员函数、一个函数对象或一个Lambda表达式。
applies是用来遍历迭代器容器的一个高级循环,在STL算法中应用广泛。
二、applies的基本用法
#include #include #include void print(int i) { std::cout << i << " "; } int main() { std::vector v{ 1, 2, 3, 4, 5 }; std::for_each(v.begin(), v.end(), print); //使用applies输出vector中的元素 return 0; }
输出结果为:1 2 3 4 5。applies函数对于迭代器容器的遍历十分方便,不需要再使用for循环进行迭代器的遍历了。
三、applies与Lambda表达式的结合
applies与Lambda表达式结合,可以用来实现更加复杂的遍历操作。
#include #include #include int main() { std::vector v{ 1, 2, 3, 4, 5 }; std::for_each(v.begin(), v.end(), [](int &x) { x *= 2; }); //使用applies和Lambda表达式将vector中的每个元素乘以2 std::for_each(v.begin(), v.end(), [](int x) { std::cout << x << " "; }); //输出vector中的元素 return 0; }
输出结果为:2 4 6 8 10。使用Lambda表达式可以使applies循环更加灵活,实现不同的操作。
四、applies与函数对象的结合
applies还可以与函数对象结合使用,这时候可以充分利用函数对象的成员变量和成员函数,实现更加丰富的操作。
#include #include #include class Multiply { public: Multiply(int _n) : n(_n) {} //构造函数 void operator()(int &x) { x *= n; } //函数调用运算符 private: int n; }; int main() { std::vector v{ 1, 2, 3, 4, 5 }; Multiply mul(3); //定义一个函数对象 std::for_each(v.begin(), v.end(), mul); //使用applies和函数对象将vector中的每一个元素乘以3 std::for_each(v.begin(), v.end(), [](int x) { std::cout << x << " "; }); //输出vector中的元素 return 0; }
输出结果为:3 6 9 12 15。与Lambda表达式不同,函数对象可以定义成员变量和成员函数,具有更加灵活的操作空间。
五、applies的自定义函数
除了使用Lambda表达式和函数对象,我们也可以自定义一个函数来配合applies使用。
#include #include #include void multiply(int &x, int n) { x *= n; } int main() { std::vector v{ 1, 2, 3, 4, 5 }; std::for_each(v.begin(), v.end(), std::bind(multiply, std::placeholders::_1, 4)); //使用applies和自定义函数将vector中的每一个元素乘以4 std::for_each(v.begin(), v.end(), [](int x) { std::cout << x << " "; }); //输出vector中的元素 return 0; }
输出结果为:4 8 12 16 20。自定义函数可以更加灵活的应用于applies中,实现不同的操作需求。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/200099.html