STL算法之std::transform

50 阅读1分钟

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

注意事项:

  1. 如果不使用std::back_insert,则输出序列必须预先分配好足够的空间
  2. 如果不在意修改原序列,则可以将原序列作为输出序列

示例二

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:

注意事项:

  1. vec2的元素数目不小于vec1的元素数目