您的位置:首页 > 其它

一句话搞定string类型大小写转换之transform用法

2012-02-21 09:58 393 查看
对于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, last1Input iterators to the initial and final positions of the first sequence. The range used is [first1,last1), which contains all the elements between first1 and last1, including the element pointed by first1 but not the
element pointed by last1.first2Input iterator to the initial position of the second range. The range includes as many elements as [first1,last1).resultOutput 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 overloads operator().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 overloads operator().

举一个例子,对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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: