一、什麼是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/zh-tw/n/200099.html