std::transform
头文件:#include<algorithm>
作用:对指定范围内的元素进行某种变换,并将变换结果存储在输出序列中。
示例一
std::vector<int>vec{ 1,2,3,4,5 };
std::vector<int>res1;
std::transform(vec.begin(), vec.end(), std::back_inserter(res1), [](int e) {return e * 2; });
for (auto& e : res1) {
std::cout << e << ","; //2,4,6,8,10
}
std::cout << std::endl;
std::string res2;
std::transform(vec.begin(), vec.end(), std::back_inserter(res2), [](int e) {return e+'0'; });
std::cout << res2 << std::endl; //12345
注意事项:
- 如果不使用
std::back_insert,则输出序列必须预先分配好足够的空间 - 如果不在意修改原序列,则可以将原序列作为输出序列
示例二
std::vector<int>vec1{ 1,2,3,4,5 };
std::vector<int>vec2{ 1,2,3,4,5,6,7 };
std::vector<int>res1;
std::transform(vec1.begin(), vec1.end(), vec2.begin(), std::back_inserter(res1), [](int e1, int e2) {return e1 + e2; });
for (auto& e : res1) {
std::cout << e << ","; //2,4,6,8,10
}
std::cout << std::endl;
std::string res2;
std::transform(vec1.begin(), vec1.end(), vec2.begin(), std::back_inserter(res2), [](int e1, int e2) {return e1 + e2 + '0'; });
std::cout << res2 << std::endl; //2468:
注意事项:
vec2的元素数目不小于vec1的元素数目