std::transform()
是 C++ 标准库中的一个算法函数,用于对一个序列的元素进行转换操作,将输入序列的每个元素应用指定的转换函数后,生成一个新序列。
std::transform()
函数的基本用法如下:
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
:一元操作函数(函数对象或函数指针),用于指定要应用于每个输入元素的转换操作。
返回值:
OutputIt
:指向输出序列的末尾迭代器。
示例如下:
#include <iostream>
#include <vector>
#include <algorithm>
int square(int x) {
return x * x;
}
int main() {
std::vector<int> nums {1, 2, 3, 4, 5};
std::vector<int> squares(nums.size());
std::transform(nums.begin(), nums.end(), squares.begin(), square);
for (const auto& num : squares) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
输出结果将是:1 4 9 16 25。
以上示例中,std::transform() 函数将 nums 容器中的每个元素应用 square() 函数进行平方操作,并将结果存储在 squares 容器中。
如果想动态的把数据插入到容器squares
中,那么可以采用std::back_inserter
,std::back_inserter
是C++标准库 <iterator>
头文件中定义的一个函数模板,它用于生成一个输出迭代器,该迭代器能够向容器(如 vector、list、deque
等)的尾部插入元素,而无需知道容器的具体大小。
示例如下:
#include <iostream>
#include <vector>
#include <algorithm>
int square(int x) {
return x * x;
}
int main() {
std::vector<int> nums{ 1, 2, 3, 4, 5 };
std::vector<int> squares;
std::transform(nums.begin(), nums.end(), std::back_inserter(squares), square);
for (const auto& num : squares) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
输出结果将是:1 4 9 16 25。