李sir_Blog

博客园 首页 联系 订阅 管理

2010年10月26日

摘要: map和multimap都自帶find(),不需Generic Algorithm就可搜尋,事實上,當container和algorithm都提供方法時,應先考慮使用container自帶的方法,因為algorithm考慮到泛型,還需要經過iterator,但container自帶的方法卻是量身訂做的,所以執行速度較快。要列出multimap中某個key的所有value,有三種方式,此範例demo... 阅读全文
posted @ 2010-10-26 20:27 李sir 阅读(2291) 评论(0) 推荐(1)

摘要: 若要將vector中反過來列印,該怎麼做呢?STL提供了reverse_iterator。1/**//*2(C)OOMusou2006http://oomusou.cnblogs.com34Filename:ReverseIterator.cpp5Compiler:VisualC++8.0/ISOC++6Description:Demohowtousereverse_iterator7Releas... 阅读全文
posted @ 2010-10-26 20:22 李sir 阅读(8754) 评论(1) 推荐(0)

摘要: 很多STL algorithm都是_if結尾的,讓我們可以帶function進去,若配合function object,可讓function更有彈性!!以下的範例想利用count_if() algorithm得知vector大於n的有幾個?1/**//*2(C)OOMusou2007http://oomusou.cnblogs.com34Filename:FunctionObjectSimple.... 阅读全文
posted @ 2010-10-26 20:19 李sir 阅读(1109) 评论(0) 推荐(0)

摘要: Abstract若想將container中的iterator,從一個值取代成另外一個值,但container並沒有提供replace()這個member function,而是提供了replace()這個Generic Algorithm。Introduction以下範例我們將vector中,所有的1取代成4。1/**//*2(C)OOMusou2006http://oomusou.cnblogs... 阅读全文
posted @ 2010-10-26 20:18 李sir 阅读(350) 评论(0) 推荐(0)

摘要: Abstract之前在(原創) 如何使用for_each() algorithm? (C/C++) (STL)曾經討論過for_each(),不過當時功力尚淺,只談到了皮毛而已,這次看了effective STL的item 41、43後,對for_each()又有了更深入的了解,因此做了本篇心得報告。Motivation看到了eXile的C++中实现 foreach使用了巨集對foreach做改善... 阅读全文
posted @ 2010-10-26 20:15 李sir 阅读(1116) 评论(0) 推荐(1)

摘要: Abstractfor_each()是STL中少數可以回傳值的algorithm,此範例在展示for_each()此特殊功能與function object可以留住state的特性。Introductionfunction object與global function的差別除了function object可以傳入參數外,還可以不使用static就可以留住state。一個簡單的需求,想要每印n個數... 阅读全文
posted @ 2010-10-26 20:11 李sir 阅读(327) 评论(0) 推荐(0)

摘要: 轉貼自 梦在天涯的STL算法学习STL算法学习,小结如下:前提: 下载stl源码: http://www.sgi.com/tech/stl/download.html打开网页: http://www.sgi.com/tech/stl/stl_index.html一 函数对象: 因为很多的算法中多使用了函数对象 二元函数对象,V1和V2为输入,V3为结果plus<T>: transfor... 阅读全文
posted @ 2010-10-26 20:09 李sir 阅读(481) 评论(0) 推荐(0)

摘要: Abstract STL並沒有提供這樣的algorithm,透過簡單的方法,就可以達成這個需求。Sample Code1/**//*2(C)OOMusou2007http://oomusou.cnblogs.com34Filename:GenericAlgo_eliminate_duplicate.cpp5Compiler:VisualC++8.0/BCB6.0/gcc3.4.2/ISOC++6D... 阅读全文
posted @ 2010-10-26 20:07 李sir 阅读(374) 评论(0) 推荐(0)

摘要: Abstract前一篇(原創) 如何使用C語言的標準函式庫進行排序? (C)談到使用C語言stdlib.h的qsort()對array進行排序,C++呢?STL也提供了sort() algorithm。IntroductionSTL的sort()不僅僅支援array,還支援其餘的container如vector,list等,這也是泛型之美,container和algorithm徹底decouple... 阅读全文
posted @ 2010-10-26 20:04 李sir 阅读(431) 评论(0) 推荐(0)

摘要: Abstract寫文字檔轉檔程式是很常見的需求,一般來說,這種都屬於dirty job,沒什麼技巧,純粹是迴圈硬幹,若使用STL來寫轉檔程式,不只程式超短,一個迴圈都不需要!!Introduction昨天網友Momo要我幫他寫一個轉檔程式,將文字檔轉成XML檔,格式如下文字檔user_b5fix.dat-1,-1,-1,-1,-1,-1一元運算符,一元運算子二叉樹,二元樹二元運算符,二元運算子二分... 阅读全文
posted @ 2010-10-26 19:54 李sir 阅读(607) 评论(0) 推荐(0)

摘要: Abstract若用C語言配合迴圈,這是個很簡單的題目,但若用C++配合STL,則有很漂亮的寫法。Introduction陣列中有2、3、1、3、5五個值,希望能列出大於2的所有元素。C++1/*2(C) OOMusou 2008 http://oomusou.cnblogs.com34Filename : GenericAlgo_remove_copy_if_predicate.cpp5Comp... 阅读全文
posted @ 2010-10-26 19:51 李sir 阅读(308) 评论(0) 推荐(0)

摘要: Abstract在(原創) 如何将字符串前后的空白去除? (使用string.find_first_not_of, string.find_last_not_of) (C/C++) (STL) 中已经可顺利将字符串前后的空白去除,且程序相当的精简,在此用另外一种方式达到此要求,且可同时将whitespace去除,并且使用template写法。Introduction原來版本的程式在VC8可執行,但... 阅读全文
posted @ 2010-10-26 19:45 李sir 阅读(6048) 评论(0) 推荐(0)

摘要: Abstract若需要將程式碼放進word交報告或做文件時,或許我們會想將程式碼加上行號方便講解,如同博客園顯示程式碼那樣,我們該如何做呢?Introduction使用環境:Visual C++ 9.0 / Visual Studio 2008一段C++的小程式,可以幫程式碼加上行號後輸出。map_code_line.cpp / C++[代码]執行結果[代码]32行[代码]是整個程式的關鍵:使用m... 阅读全文
posted @ 2010-10-26 19:39 李sir 阅读(526) 评论(0) 推荐(0)

摘要: Abstract一個很常見的需求:『將struct塞進vector』,在C++該怎麼做呢?Introduction使用環境:Visual C++ 9.0 / Visual Studio 2008由於vector只允許一個欄位,所以才會想將struct塞進vector,以彌補vector的不足。struct_in_vector.cpp / C++[代码]執行結果[代码]由於vector內放的是str... 阅读全文
posted @ 2010-10-26 19:32 李sir 阅读(6019) 评论(0) 推荐(0)

摘要: Abstract回文是學習C語言時,常出現的作業與考題。Introduction所謂回文,就事字串的第一個字元等於最後一個字元,第二個字元等於倒數第二個字元。palindrome.c / C[代码]18行[代码]依序檢查字串第一個字元是否等於最後一個字元,第二個字元是否等於倒數第二個字元,若發現任何一個字元不同,就不是回文。感謝沐枫的提醒,在C++有更精簡的寫法。palindrome.cpp / ... 阅读全文
posted @ 2010-10-26 19:29 李sir 阅读(1067) 评论(0) 推荐(0)

摘要: C/C++並沒有提供內建的int轉string函數,這裡提供幾個方式達到這個需求。1.若用C語言,且想將int轉char *,可用sprintf(),sprintf()可用類似printf()參數轉型。1/**//*2(C)OOMusou2007http://oomusou.cnblogs.com34Filename:int2str_sprintf.cpp5Compiler:VisualC++8.... 阅读全文
posted @ 2010-10-26 19:24 李sir 阅读(17381) 评论(0) 推荐(1)

摘要: Abstracion最近有同學問我這個問題,整理之後,將心得提出與大家分享。Introduction學習C/C++時,一開始要學的就是標準輸入輸出。一個很簡單的需求:由鍵盤輸入字串存入記憶體,若輸入了quit,則結束,最後在全部已經存在記憶體中的字串。先看看C++要怎麼寫。C++ / string_into_svec.cpp1/*2(C) OOMusou 2008 http://oomusou.c... 阅读全文
posted @ 2010-10-26 19:13 李sir 阅读(518) 评论(0) 推荐(0)

摘要: AbstractionIntroduction學習資料結構,第一個要學的就是linked list,本文示範最簡單的linked list實現,包含建立與顯示,可把它當成linked list的標準範本,畢竟步驟都差不多。一個基本的問題:為什麼需要linked list?若要將大量資料存到記憶體,你會想到什麼?第一個想到的就是array,但C語言是個靜態語言,array必須事先宣告大小,這樣com... 阅读全文
posted @ 2010-10-26 19:06 李sir 阅读(595) 评论(0) 推荐(0)

摘要: Abstract這是一個初學者常犯的錯,不過卻是一個很好的問題,充分表現出指標的特色。Introduction一個很簡單的C語言,只有6行。C語言1#include <stdio.h>23int main() {4 int*ptr = 345;5 printf("%d\n", *ptr);6}在不同的compiler會有不同結果,在VC6不能編譯,會有錯誤訊息,在VC8則無錯誤訊息,但... 阅读全文
posted @ 2010-10-26 19:00 李sir 阅读(631) 评论(0) 推荐(0)

摘要: Abstract這是一個實務上常用的功能,可惜在C語言的string.h並沒有提供,本文實作出一個小function達到此功能,並搭配pointer。 Introduction在(筆記) 如何在字串中從指定字元抓到指定字元? (C/C++) (C),其實已經可以包含99%的需求,唯一的缺憾是,string.h的函數大都回傳的char *,若要更靈活的搭配string.h原本的函數,勢必提供poin... 阅读全文
posted @ 2010-10-26 17:33 李sir 阅读(247) 评论(0) 推荐(0)

摘要: Abstract寫過JavaScript或ASP的朋友,應該常常用到split()這個函數,他可以輕易地將string轉成array,C語言並沒有相對應的函數,只有strtok()較為接近,稍微加工後,就可以在C語言實現split()。Introduction使用環境 : IE 7.0 + Visual Studio 2008在JavaScript,可以輕易的將string轉成array。spli... 阅读全文
posted @ 2010-10-26 17:30 李sir 阅读(3413) 评论(0) 推荐(0)

摘要: 發現一個很好的台灣的博客。可以當作書來閱讀http://www.cnblogs.com/oomusou/archive/2009/05/10/c_strtok.htmlAbstractstrtok()的簡單使用範例。Introduction使用環境 : Visual Studio 2008strtok.c / C[代码]執行結果完整程式碼下載strtok.7zRemarkcsie-tw問到,為什麼... 阅读全文
posted @ 2010-10-26 17:28 李sir 阅读(690) 评论(0) 推荐(0)