陳俊杉教授說,使用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
15 using namespace std;
16
17 string & toLower( string & );
18
19 int 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
33 string & toLower( string & s) {
34 // Modify each char element
35 transform(s.begin(), s.end(), s.begin(), tolower);
36 return s;
37}
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
15 using namespace std;
16
17 string & toLower( string & );
18
19 int 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
33 string & toLower( string & s) {
34 // Modify each char element
35 transform(s.begin(), s.end(), s.begin(), tolower);
36 return s;
37}
執行結果
1
stanley b. lippman
2 scott meyers
3 nicolai m. josuttis
2 scott meyers
3 nicolai m. josuttis