📌  相关文章
📜  C++ STL中的std :: transform()(对所有元素执行操作)(1)

📅  最后修改于: 2023-12-03 15:29:51.010000             🧑  作者: Mango

C++ STL 中的 std::transform()

在 C++ STL 中,std::transform() 是一个十分实用的函数,它可以对容器中的所有元素执行指定的操作,并将结果存储到另一容器中。在日常的编程中,我们经常需要对一个容器中的元素进行操作,并将结果保存到另一个容器中,这时就可以使用 std::transform() 函数。

函数原型

std::transform() 的函数原型如下:

template<class InputIt, class OutputIt, class UnaryOperation>
OutputIt transform(InputIt first1, InputIt last1, OutputIt d_first, UnaryOperation unary_op);

参数解释:

  • first1last1:定义了输入序列的范围;
  • d_first:目标序列的起始位置;
  • unary_op:对每个元素执行的操作的函数对象。
使用示例

下面是一个使用 std::transform() 函数将一个 vector 中的元素都平方后放入另一个 vector 的示例代码:

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
    std::vector<int> v1{1, 2, 3, 4, 5};
    std::vector<int> v2(v1.size());
    std::transform(v1.begin(), v1.end(), v2.begin(), [](int x){ return x * x; });

    for (auto i : v2) {
        std::cout << i << " ";
    }
    std::cout << std::endl;

    return 0;
}

输出结果为:

1 4 9 16 25
函数对象

std::transform() 函数对每个元素都执行一个操作,这个操作是由一个函数对象来完成的。函数对象可以是普通函数、函数指针或者是 C++11 中引入的 lambda 表达式。

下面是使用一个普通函数作为函数对象的示例代码:

#include <iostream>
#include <vector>
#include <algorithm>

int square(int x) { return x * x; }

int main()
{
    std::vector<int> v1{1, 2, 3, 4, 5};
    std::vector<int> v2(v1.size());
    std::transform(v1.begin(), v1.end(), v2.begin(), square);

    for (auto i : v2) {
        std::cout << i << " ";
    }
    std::cout << std::endl;

    return 0;
}

输出结果和上例相同。

总结

std::transform() 函数是 C++ STL 中的一个实用函数,它可以对容器中的所有元素执行指定的操作,并将结果保存到另一个容器中。我们可以使用自定义的函数对象来执行自己想要的操作。