注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

罗维的博客

{ 关注机器学习、计算广告、自然语言处理、大规模数据处理等 }

 
 
 
 
 

日志

 
 

[C++] 如何使用STL中的transform()  

2010-06-19 17:13:14|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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


首先举一例,我们看看transform算法能做什么。
例:
std::string sl = "hello";
std::transform(sl.begin(), sl.end(), sl.begin(), toupper);

这样得到 sl 值是 (大写的) HELLO

transform 是遍历一个容器里面元素 然后执行一个操作
第1和2个参数是数据起始和结束位置(迭代器)
参数3是写入目标的起始位置
参数4是执行的操作(函数)

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

 1(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空/* 
 2(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空(C) OOMusou 2006 http://oomusou.cnblogs.com
 3(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空
 4(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空Filename    : StreamIteratorCinCout.cpp
 5(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空Compiler    : Visual C++ 8.0 / ISO C++
 6(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空Description : Demo how to use transform() algorithm
 7(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空Release     : 12/10/2006
 8(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空*/

 9(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空#include <iostream>
10(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空#include <cctype>
11(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空#include <algorithm>
12(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空#include <vector>
13(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空#include <string>
14(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空
15(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空using namespace std;
16(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空
17(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空string& toLower(string&);
18(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空
19(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空int main() {
20(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空  vector<string> svec;
21(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空  svec.push_back("Stanley B. Lippman");
22(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空  svec.push_back("Scott Meyers");
23(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空  svec.push_back("Nicolai M. Josuttis");
24(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空
25(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空  // Modify each string element
26(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空  transform(svec.begin(), svec.end(), svec.begin(), toLower);
27(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空  
28(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空  copy(svec.begin(),svec.end(), ostream_iterator<string>(cout,"\n"));
29(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空
30(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空  return 0;
31(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空}

32(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空
33(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空string& toLower(string& s) {
34(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空  // Modify each char element
35(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空  transform(s.begin(), s.end(), s.begin(), tolower);
36(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空  return s;
37(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空}

執行結果
1(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空stanley b. lippman
2(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空scott meyers
3(转)如何使用STL中的transform()这个algorithm? (C/C++) - luowei828 - 小罗的天空nicolai m. josuttis
  评论这张
 
阅读(3226)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017