一、什麼是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
微信掃一掃
支付寶掃一掃