(原創) 如何使用transform() algorithm? (C/C++) (STL)

本文通过实例展示了如何使用STL中的transform()函数,将vector容器内的所有字符串转换为小写,深入探讨了C++标准模板库在数据处理上的高效应用。

陳俊杉教授說,使用STL的最高境界,就是程式看不到for和while loop,完全用STL algorithm搞定。當資料裝進container後,接下來就是對container內的資料一個一個做加工,transform()允許我們寫自己的function加以處理。

在以下的範例中,我們希望將vector中所有的字串變成小寫,所以使用transform()對vector中每個string元素做處理,C/C++的字串並沒有提供轉寫小的功能(.NET的string有),但C有提供對每個字元轉小寫的功能,由於string也是個container,我們再次使用transform()處理每個字元,並且呼叫<cctype>的tolower()將每個字元改成小寫。

 1ExpandedBlockStart.gifContractedBlock.gif/**//* 
 2InBlock.gif(C) OOMusou 2006 http://oomusou.cnblogs.com
 3InBlock.gif
 4InBlock.gifFilename    : StreamIteratorCinCout.cpp
 5InBlock.gifCompiler    : Visual C++ 8.0 / ISO C++
 6InBlock.gifDescription : Demo how to use transform() algorithm
 7InBlock.gifRelease     : 12/10/2006
 8ExpandedBlockEnd.gif*/

 9None.gif#include <iostream>
10None.gif#include <cctype>
11None.gif#include <algorithm>
12None.gif#include <vector>
13None.gif#include <string>
14None.gif
15None.gifusing namespace std;
16None.gif
17None.gifstring& toLower(string&);
18None.gif
19ExpandedBlockStart.gifContractedBlock.gifint main() dot.gif{
20InBlock.gif  vector<string> svec;
21InBlock.gif  svec.push_back("Stanley B. Lippman");
22InBlock.gif  svec.push_back("Scott Meyers");
23InBlock.gif  svec.push_back("Nicolai M. Josuttis");
24InBlock.gif
25InBlock.gif  // Modify each string element
26InBlock.gif  transform(svec.begin(), svec.end(), svec.begin(), toLower);
27InBlock.gif  
28InBlock.gif  copy(svec.begin(),svec.end(), ostream_iterator<string>(cout,"\n"));
29InBlock.gif
30InBlock.gif  return 0;
31ExpandedBlockEnd.gif}

32None.gif
33ExpandedBlockStart.gifContractedBlock.gifstring& toLower(string& s) dot.gif{
34InBlock.gif  // Modify each char element
35InBlock.gif  transform(s.begin(), s.end(), s.begin(), tolower);
36InBlock.gif  return s;
37ExpandedBlockEnd.gif}

執行結果
1None.gifstanley b. lippman
2None.gifscott meyers
3None.gifnicolai m. josuttis
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值