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

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

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

 1/* 
 2(C) OOMusou 2006 http://oomusou.cnblogs.com
 3
 4Filename    : StreamIteratorCinCout.cpp
 5Compiler    : Visual C++ 8.0 / ISO C++
 6Description : Demo how to use transform() algorithm
 7Release     : 12/10/2006
 8*/

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

32
33string& toLower(string& s) {
34  // Modify each char element
35  transform(s.begin(), s.end(), s.begin(), tolower);
36  return s;
37}

執行結果
1stanley b. lippman
2scott meyers
3nicolai m. josuttis

posted on 2006-12-10 03:52  真 OO无双  阅读(7927)  评论(3编辑  收藏  举报

导航