对于cpp中的string类型大小写转换用的可以说非常频繁,下面是使用STL实现的一种非常简单的方式进行转换
std::transform (strExt.begin(), strExt.end(), strExt.begin(), ::toupper ); //将strExt转换成大写。
其实transform的用法非常广泛,下面对其进行简要介绍。
查看transform的标准定义
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, InputIterator1 last1,
InputIterator2 first2, OutputIterator result,
BinaryOperator binary_op );
其实现类似于下面:template < class InputIterator, class OutputIterator, class UnaryOperator >
OutputIterator transform ( InputIterator first1, InputIterator last1,
OutputIterator result, UnaryOperator op )
{
while (first1 != last1)
*result++ = op(*first1++); // or: *result++=binary_op(*first1++,*first2++);
return result;
}
first1, last1 Input iterators to the initial and final positions of the first sequence. The range used is[first1,last1), which contains all the elements betweenfirst1andlast1, including the element pointed byfirst1but not the element pointed bylast1. first2 Input iterator to the initial position of the second range. The range includes as many elements as[first1,last1). result Output iterator to the initial position of the range where function results are stored. The range includes as many elements as[first1,last1). op 一元操作函数 Unary function taking one element as argument, and returning some result value. This can either be a pointer to a function or an object whose class overloadsoperator(). binary_op 二元操作函数 Binary function taking two elements as argument (one of each of the two sequences), and returning some result value. This can either be a pointer to a function or an object whose class overloadsoperator().
举一个例子,对vector进行操作
// transform algorithm example
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int op_increase (int i) { return ++i; }
int op_sum (int i, int j) { return i+j; }
int main () {
vector<int> first;
vector<int> second;
vector<int>::iterator it;
// set some values:
for (int i=1; i<6; i++) first.push_back (i*10); // first: 10 20 30 40 50
second.resize(first.size()); // allocate space
transform (first.begin(), first.end(), second.begin(), op_increase);
// second: 11 21 31 41 51
transform (first.begin(), first.end(), second.begin(), first.begin(), op_sum);
// first: 21 41 61 81 101
cout << "first contains:";
for (it=first.begin(); it!=first.end(); ++it)
cout << " " << *it;
cout << endl;
return 0;
}
结果输出
first contains: 21 41 61 81 101