C++ 标准库 - <algorithm>

C++ std::transform 对输入区间每个元素调用运算,把结果写入输出区间。输出可以与输入相同(原地变换),也可以是另一容器。目标空间同样须预先准备或使用插入迭代器。

原型

template<class InputIt, class OutputIt, class UnaryOp>
OutputIt transform(InputIt first, InputIt last, OutputIt d_first, UnaryOp op);

参数

  • first, last:输入区间。
  • d_first:输出起始。
  • op:一元运算。另有二元版本同时遍历两个输入区间。

返回值

指向输出中最后一个写入位置的下一迭代器。

示例

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

int main() {
    std::vector<int> a = {1, 2, 3};
    std::vector<int> b(3);
    std::transform(a.begin(), a.end(), b.begin(), [](int x) { return x * x; });
    for (int x : b) {
        std::cout << x << " ";
    }
    std::cout << std::endl;
    return 0;
}

输出:

1 4 9 

注意事项

运算一般不应带可观察副作用,以便与算法的遍历顺序约定一致。需要原地平方时可把 d_first 设为 a.begin()。

下一页介绍reverse:反转区间。