Transform変換大文字と小文字

2454 ワード

まず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 );

上の2つの関数のリロードバージョン
1は元の[first 1,last 1)間のすべての和タイプTに対して,1元関数opを呼び出し,結果をresultに出力する.
2は元の[first 1,last 1]間のすべてとタイプTに対して、もう一つのパラメータもfirstから始まり、二元関数opを呼び出し、結果をresultに出力する
その内部実現は以下の通りである.
template //    ,       
_STLP_INLINE_LOOP _OutputIter
transform(_InputIter __first, _InputIter __last, _OutputIter __result, _UnaryOperation __opr) {
  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
  for ( ; __first != __last; ++__first, ++__result)
    *__result = __opr(*__first);//    
  return __result;//           
}
template 
_STLP_INLINE_LOOP _OutputIter
transform(_InputIter1 __first1, _InputIter1 __last1,
          _InputIter2 __first2, _OutputIter __result,_BinaryOperation __binary_op) {
  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1))
  for ( ; __first1 != __last1; ++__first1, ++__first2, ++__result)
    *__result = __binary_op(*__first1, *__first2);//    
  return __result;
}

関数呼び出しは各行の関数形式を読み込み、出力します.
#include 
#include 
#include 
using std::cin;
using std::cout;
int main()
{
  std::string str;
  while(cin>>str){
    std::transform(str.begin(),str.end(),str.begin(),tolower);
    cout<

補足:別の呼び出し関数は次のとおりです.
vector a;
vector b;
for(int i=1;i<10;i++) a.push_back(i*10);// a 10 20 30 ...90
for(int i=1;i<10;i++) b.push_back(i*(-10)); //b -10 -20 ..-90

vector c(10);//             
transorm(a.begin,a.end(),b.begin(),c.begin(),plus()); // c 0 0 0 0 0 0 0 0 0

転載先:https://www.cnblogs.com/K-R-Q/archive/2011/10/24/2222692.html