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

对于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 between  first1 and  last1, including the element pointed by  first1 but not the element pointed by  last1.
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 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

你可能感兴趣的:(Algorithm,String,function,iterator,Class,returning)