2005年6月20日 星期一

Know Thyself

Know Thyself

盧梭在"論人類不平等的起源和基礎"的序言中引用的第一句話,”認識你自己”。這句話刻在古代神廟上已超過千年了,但是千年之中能做到的有幾人呢?

人的精神就如同一望無際的大海,而人所意識到的自我,就像在大海中的小舢舨一樣,一生都要為大浪、日照及風暴所苦

要怎麼認識自己呢?不借助他人的映射,人就看不到自己的自我。就像是不借助鏡子,人就看不到自己的長相。但是每張鏡子上,我的臉孔是相同的,在不同人的身上,我所看到的自我是不同的。那要從哪裡找到自我?

為何我昨天會哭?為何我明天會笑? 

為何我選了這條路?

Know Thyself

           Marty  6.21.2005

 


2005年6月12日 星期日

簡言除去memory leak 的方式

1. 用crtdbg.h   
請參考以下連結, 適用windows 下 VC 開發環境

 http://www1.kcn.ne.jp/~robe/pf/pf008.html

2.用 IBM rational purify
這真是一個超級可惡的公司出的程式,
安裝了舊版的rational rose 就不讓人install !!  
我只是要安裝 purify 的試用版, 為何要逼我 uninstall rational rose 呢!
VC 使用這個外掛, 執行起來很慢, 但是確實有效.

 

                                                                     Marty    06.13.2005

 


2005年6月6日 星期一

VC6 內建的 stl 不要用

用了vc6 的 stl
std::string Str1 = "AAA";
Str1 = "B";

"AAA"竟然會被leak 掉!! 做的有夠差的!!

偏偏vc6 的 string 竟然沒有clear() , 不能使用 Str1.clear()

要先assign Str1 = "" 才不會有奇怪的memory leak.

 

強烈建議絕對別用 VC6 的STL!

請download stlport 或 sgi 的 stl  ..

                                                             Marty 6.7.2005


2005年6月1日 星期三

c++ boost庫, 小記(2)

再來, 取 token. 就是把資料從字串中分離出來.
請看  boost庫的 Tokenizer.

http://www.boost.org/libs/tokenizer/introduc.htm


 #include<iostream>
#include<boost/tokenizer.hpp>
#include<string>

int main(){
   using namespace std;
   using namespace boost;
   string s = "This is,  a test";
   tokenizer<> tok(s);
   for(tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){
       cout << *beg << "\n";
   }
}

The default TokenizerFunction is char_delimiters_separator<char> which defaults to breaking up a string based on space and punctuation.
用 space 跟 ',' 分割 "This is , a test" 應該會得到 "This"  "is"  "a" "test"

Tokenizer 還有其它用法, 有char_separator,escaped_list_separator,offset_separator,官網上有更詳細的介紹.
http://www.boost.org/libs/tokenizer/index.html


c++ boost庫, 小記(1)

用google 搜一下, 發現關於 c++ boost 庫沒有繁體中文資源, 所以把手記寫在blog上, 讓有緣人也可以看一下.

http://www.boost.org/libs/conversion/lexical_cast.htm

int main(int argc, char * argv[])
{
    using boost::lexical_cast;
    using boost::bad_lexical_cast;

    std::vector<short> args;

    while(*++argv)
    {
        try
        {
            args.push_back(lexical_cast<short>(*argv));
        }
        catch(bad_lexical_cast &)
        {
            args.push_back(0);
        }
    }
    ...
}

 

有一天我打了一百多個gcvt 跟itoa , 就開始後悔沒有早點碰到 boost 庫.

#include <boost/lexical_cast.hpp> #include <string> #include <iostream> int main() { using std::string; const double d = 123.12; string s = boost::lexical_cast<string>(d); std::cout<<s<<std::endl; return 0; }看吧, 超好用!~