std::transform
时间: 2023-09-15 11:19:07 浏览: 100
`std::transform` 是 C++ STL 中的一个算法,它可以将一个序列中的每个元素进行转换,并将转换后的结果放入另一个序列中。它的函数原型如下:
```cpp
template<class InputIt, class OutputIt, class UnaryOperation>
OutputIt transform(InputIt first1, InputIt last1, OutputIt d_first, UnaryOperation unary_op);
```
其中,`first1` 和 `last1` 表示输入序列的起始和终止迭代器,`d_first` 表示输出序列的起始迭代器,`unary_op` 是一个一元函数对象,它接受输入序列中的每个元素作为参数,并返回转换后的结果。
例如,下面的代码将一个 `vector<int>` 中的每个元素都加 1,并将结果存储到另一个 `vector<int>` 中:
```cpp
std::vector<int> v1{1, 2, 3};
std::vector<int> v2(v1.size());
std::transform(v1.begin(), v1.end(), v2.begin(), [](int x) { return x + 1; });
```
此时,`v2` 中的元素为 `{2, 3, 4}`。
相关问题
std::transform 对两个std::vector对应元素相加
`std::transform` 是 C++ 标准库中的算法模板,它用于对两个容器中的元素应用某种操作,并将结果存储到另一个容器中。如果你想利用 `std::transform` 来对两个 `std::vector` 中对应的元素相加,可以按照以下步骤操作:
1. 首先,确保你的 `std::vector` 包含相同的类型,这样才能进行相应的数值运算。
2. 定义一个函数对象(Function Object),也可以是一个 lambda 表达式,这个函数接受两个参数,分别代表从两个 `std::vector` 中取出的元素,然后返回它们的和。例如,如果你的元素是整数,你可以这样创建函数对象:
```cpp
auto add = [](int a, int b) { return a + b; };
```
3. 使用 `std::transform` 和两个输入的 `std::vector`,以及定义好的函数对象,生成一个新的 `std::vector`,其中包含了原两个向量对应位置元素的和:
```cpp
std::vector<int> result;
std::transform(input_vector1.begin(), input_vector1.end(),
input_vector2.begin(), std::back_inserter(result), add);
```
这里 `std::back_inserter(result)` 指定了新产生的元素将被添加到 `result` 后面。
4. 最后,`result` 就是你想要的结果,每个元素是 `input_vector1` 和 `input_vector2` 对应位置元素之和。
template <typename T, typename U> static void convert(const std::vector<std::vector<T>>& inputs, std::vector<std::vector<U>>* outputs) { outputs->reserve(inputs.size()); std::transform(inputs.begin(), inputs.end(),outputs->back, [](const std::vector<T>& p, std::vector<U>* q) { return convert(p, q); }); }
这是一个 C++ 的函数模板,用于将一个二维的元素类型为 T 的向量 inputs 转换为元素类型为 U 的向量 outputs。函数中使用了 lambda 表达式和 STL 算法 transform()。
具体来说,函数首先通过 reserve() 函数为输出向量 outputs 分配足够的内存,以避免多次动态地分配空间。然后,使用 STL 算法 transform() 对输入向量 inputs 进行转换,并将结果存储在输出向量 outputs 中。在 transform() 函数中,使用了一个 lambda 表达式,该表达式将每个输入向量 p 转换为一个输出向量 q,并返回结果。其中,convert() 是另一个函数模板,用于将元素类型为 T 的向量转换为元素类型为 U 的向量。
需要注意的是,调用该函数时,需要传递一个指向输出向量的指针,该指针指向的向量需要在调用之前已经被创建并分配足够的空间。
阅读全文