STL 中的 transform() 函数用于转换元素,转换有两种:一元转换和二元转换。一元转换是对容器给定范围内的每个元素做某种一元运算后放在另一个容器里。只涉及一个参与转换运算的容器。
二元转换是对两个容器给定范围内的每个元素做二元运算后放在另一个容器里。涉及两个参与转换运算容器。
#include <algorithm>
template < class InputIterator, class OutputIterator, class UnaryOperator >
OutputIterator transform ( InputIterator first1, // 源容器的起始地址
InputIterator last1, // 源容器的终止地址
OutputIterator result, // 目标容器的起始地址
UnaryOperator op ); // 函数指针
template < class InputIterator1, class InputIterator2,
class OutputIterator, class BinaryOperator >
OutputIterator transform ( InputIterator1 first1, // 源容器1的起始地址
InputIterator1 last1, // 源容器1的终止地址
InputIterator2 first2, // 源容器2的起始地址,元素个数与1相同
OutputIterator result, // 目标容器的起始地址,元素个数与1相同
BinaryOperator binary_op ); // 函数指针
参数 | 描述 |
---|---|
first1 | 输入迭代器 |
last1 | 输入迭代器 |
first2 | 输入迭代器 |
result | 输出迭代器 |
binary_op | 函数指针 |
一元转换是对容器给定范围内的每个元素做某种一元运算后放在另一个容器里。只涉及一个参与转换运算的容器。有 4 个参数,前 2 个指定要转换的容器的起止范围,第 3 个参数是结果存放容器的起始位置,第 4 个参数是一元运算。
二元转换是对两个容器给定范围内的每个元素做二元运算后放在另一个容器里。涉及两个参与转换运算容器。有 5 个参数,前 2 个指定参与转换的第 1 个容器的起止范围,第 3 个参数是转换的第 2 个容器的起始位置,
第 4 个参数是结果存放容器的起始位置,第 5 个参数是二元运算。
使用 STL transform 函数转换元素
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
int op_increase (int i)
{
return i+1;
}
int op_sum (int i, int j)
{
return i+j;
}
int to_upper(int c)
{
if (islower(c))
{
return (c-32);
}
return c;
}
int to_lower(int c)
{
if (isupper(c))
{
return c+32;
}
return c;
}
int main ()
{
std::cout << "嗨客网(www.haicoder.net)\n" << std::endl;
vector<int> first;
vector<int> second;
vector<int>::iterator it;
for (int i=1; i<6; i++)
{
first.push_back (i*10);
}
second.resize(first.size());
transform (first.begin(), first.end(), second.begin(), op_increase);
cout << "second contains:";
for (it=second.begin(); it!=second.end(); ++it)
{
cout << " " << *it;
}
cout << endl;
transform (first.begin(), first.end(), second.begin(), first.begin(), op_sum);
cout << "first contains:";
for (it=first.begin(); it!=first.end(); ++it)
{
cout << " " << *it;
}
cout << endl;
string strsrc("Hello, World!");
string strdest;
strdest.resize(strsrc.size());
transform(strsrc.begin(), strsrc.end(), strdest.begin(), to_upper);
cout << strdest << endl;
transform(strsrc.begin(), strsrc.end(), strdest.begin(), to_lower);
cout << strdest << endl;
return 0;
}
我们在 Linux 下使用 g++ 进行编译,具体命令如下:
g++ transform.cpp -std=c++11
编译后,我们直接运行生成的二进制文件 a.out
,如下图所示:
我们使用了 transform 函数,实现了集合中元素的转换。
STL 中的 transform() 函数用于转换元素,转换有两种:一元转换和二元转换。一元转换是对容器给定范围内的每个元素做某种一元运算后放在另一个容器里。只涉及一个参与转换运算的容器。
二元转换是对两个容器给定范围内的每个元素做二元运算后放在另一个容器里。涉及两个参与转换运算容器。