全面了解applies

发布时间:2023-05-20

一、什么是applies

applies是一种C++ STL算法,它可以将特定函数应用于迭代器范围内的每个元素。这个函数可以是一个全局函数、一个成员函数、一个函数对象或一个Lambda表达式。 applies是用来遍历迭代器容器的一个高级循环,在STL算法中应用广泛。

二、applies的基本用法

#include <algorithm>
#include <iostream>
#include <vector>
void print(int i) {
    std::cout << i << " ";
}
int main() {
    std::vector<int> 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 <algorithm>
#include <iostream>
#include <vector>
int main() {
    std::vector<int> 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 <algorithm>
#include <iostream>
#include <vector>
class Multiply {
public:
    Multiply(int _n) : n(_n) {} // 构造函数
    void operator()(int &x) { x *= n; } // 函数调用运算符
private:
    int n;
};
int main() {
    std::vector<int> 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 <algorithm>
#include <iostream>
#include <vector>
void multiply(int &x, int n) {
    x *= n;
}
int main() {
    std::vector<int> 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中,实现不同的操作需求。