• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            勤能補拙,Expter

            成都游戲Coder,記錄游戲開發過程的筆記和心得!

            一周總結,讀書筆記

                      這周主要是熟悉開發流程,閱讀工程代碼,熟悉方案邏輯,查看需求文檔,然后就是看書學習,閑來無事可以聽下歌,中午休息的時候去zoj做了幾道題目。

                     
                    查看了接近一周的代碼和書籍有了一下總結:
            1.如果不需要一個類的對象不能被隱式的轉換,可以在構造函數前增加關鍵字explicit  
               
             1template<class T>
             2class Array
             3{
             4public:
             5    explicit Array(int _size = 0);
             6    T & operator [](int index);
             7    
             8}
            ;
             9
            10Array<int> a(10);
            11Array<int> b(10);
            12
            13if (a == b[i])
            14{
            15    // 如果沒有加explicit,可以編譯通過,加了就不能通過
            16}

            17// 要轉換可以使用
            18if (a == static_cast<int> b[i])
            19{
            20    ..
            21}

            2.可以通過宏或者const常量,來優化,減少和優化常量,還可以利用宏來定義一些函數,或者字符串的處理。
               比如一個簡單的字符串處理
              
            1#define  STR(ST) #ST

            3.容器的使用,注意各種函數的參數和返回值以及各種函數使用。
               比如:關聯容器和標準容器在刪除元素的時候會不同。
                 例子:
             1對于ma等關聯容器的元素刪除
             2map<int,int> mp;
             3for (map<int,int>::iterator it = mp.begin(); it != mp.end();)
             4{
             5    if ()  //滿足刪除條件
             6    {
             7        mp.erase(it++);//刪除當前節點,并返回下一個元素,自加
             8    }

             9    else
            10    {
            11        it++;
            12    }

            13}

            14對于vector等標準容器的元素刪除
            15vector<int> ve;
            16for (vector<int>::iterator it = ve.begin(); it != ve.end();)
            17{
            18    if ()  //滿足刪除條件
            19    {
            20        it = ve.erase(it);
            21    }

            22    else
            23    {
            24        it++;
            25    }

            26}

            27
            28關于2者區別主要是erase返回值問題,可以在網上查相關的說明,

            4.關于內存池,基于動態分配的安全的線程池,可以利用2個參數,一個數據類型,一個鎖類的參數模板。
               關于內存池可以閱讀boost::pool 庫相關文檔,Boost pool 庫引入了可用于實現快速內存分配的工具。正確的內存塊對齊可以得到保證。

               根據 Boost 文檔所述,當您分配和釋放許多小型對象時,建議使用池。使用池的另一個不太明顯的優點在于,作為程序員,您不必擔心內存泄露:內存由 Boost 庫在內部自動進行管理。要使用 pool 庫,您不必在鏈接時提供特定的庫——單憑頭文件就足以完成鏈接了。 有多個接口對 pool 庫可用:
               關于Boost pool可以閱讀
              http://www.ibm.com/developerworks/cn/aix/library/au-util_boost_lib/


                 另外實現一個鎖類有很大的用處,比如
             1template<typename TyVal>
             2class Lock
             3{
             4public:
             5    explicit Lock()
             6    {}
             7    explicit Lock(TyVal val):_val(val)
             8    {
             9        //加鎖
            10    }

            11    ~Lock(){//釋放}
            12private:
            13    TyVal _val;
            14}
            ;
            15
            16如果我們有一段代碼需要加鎖,則可以直接使用
            17vector<int> Vint;
            18Lock<vector<int> > lock(Vint);
            19可以直到lock的聲明周期結束,釋放資源

            5.關于重載操作符,本周看到同事們在討論一個關于結構體的代碼
              實例如下:
              
             1struct Test
             2{
             3    //
             4    
             5    Test & operator = (const Test &_t)
             6    {
             7        //關于此處是否需要增加一個 _t與*this的判斷,
             8       memcpy(this,&t,sizeof(t));      
             9        return *this;
            10    }

            11    
            12    //
            13}
            ;
                因為效率和安全的問題,是否需要增加判斷的代碼,比如
                 if(_t == *this)
                 {
                     return *this;
                 }
               其實Effective C++的條款17: (在operator=中檢查給自己賦值)的情況已經說了需要增加一個自檢驗證,我們姑且不考慮memcpy的數據重疊問題(new placement),增加一個明顯有好處。

            6. 必須有良好的OOA,OOD思想,這樣能更快寫出,高效的代碼。
            7. 算法重要,有良好的編程風格,在確保程序穩定的同時,增加效率。
             

            個人總結不代表其他意見。。

            posted on 2009-03-29 22:28 expter 閱讀(2881) 評論(7)  編輯 收藏 引用 所屬分類: 其他學習筆記工作筆記生活筆記

            評論

            # re: 一周總結,讀書筆記 2009-03-29 22:55 bruce wuu

            不錯哦,你已經工作啦,主要具體做些什么工作呀?你的方向是什么呀?
            我走游戲編程這條路 呵呵 現在還沒什么工作經驗呢  回復  更多評論   

            # re: 一周總結,讀書筆記[未登錄] 2009-03-29 22:59 A

            第一個的好拗口  回復  更多評論   

            # re: 一周總結,讀書筆記[未登錄] 2009-03-30 00:08 jarod

            如果我沒記錯的話,map.erase(it)后,it移動的結果是未定義的。有篇論文還專門討論了這個問題。所以這個用法在不同的stl實現上會出現不同的結果,
            最好不要這樣用。但vector是可以的。  回復  更多評論   

            # re: 一周總結,讀書筆記 2009-03-30 08:48 路過的

            >>>如果不需要一個類的對象不能被隱式的轉換

            似乎多了個不字吧


            >>>memcpy(*this,_t,sizeof(_t));

            能這么做嗎  回復  更多評論   

            # re: 一周總結,讀書筆記 2009-03-30 09:11 expter

            @路過的

            寫錯了,
            應該是 memcpy(this,&t,sizeof(t));
            謝謝  回復  更多評論   

            # re: 一周總結,讀書筆記 2009-04-01 12:20 f

            ding yi xia   回復  更多評論   

            # re: 一周總結,讀書筆記 2009-04-03 18:28 xx

            要不讓編譯器提供=操作符 直接申明成private而且不去實現,這就行了

            要刪除容器內滿足特定條件的元素 algorithm中的remove_if就行了 簡單明了,還得注意如果容器里是指針刪除時的情況。

            5.關于重載操作符,本周看到同事們在討論一個關于結構體的代碼
            實例如下:
            1struct Test
            2{
            3 //
            4
            5 Test & operator = (const Test &_t)
            6 {
            7 //關于此處是否需要增加一個 _t與*this的判斷,
            8 memcpy(this,&t,sizeof(t));
            9 return *this;
            10 }
            11
            12 //
            13}; 因為效率和安全的問題,是否需要增加判斷的代碼,比如
            if(_t == *this)
            {
            return *this;
            }

            不管你是不是對this判斷,這樣做都是很危險的,如果結構體中有一個類,類中有虛函數,不能保證sizeof(t)就是你預想的結果  回復  更多評論   

            久久强奷乱码老熟女| 国产精品免费久久久久影院| 久久久久久久综合日本| 久久人人爽人人人人爽AV| 国产成人精品免费久久久久| 久久久艹| 一本色道久久99一综合| 精品综合久久久久久88小说| 色狠狠久久AV五月综合| 久久久久亚洲av成人无码电影| 国产香蕉久久精品综合网| 丁香五月综合久久激情| 久久香综合精品久久伊人| 97r久久精品国产99国产精| 久久水蜜桃亚洲av无码精品麻豆| 久久精品国产秦先生| 欧美伊香蕉久久综合类网站| 99精品国产在热久久| 亚洲一级Av无码毛片久久精品| 色婷婷狠狠久久综合五月| 国产精品无码久久综合网| 无码国内精品久久人妻蜜桃 | 91精品国产高清久久久久久国产嫩草| 久久精品国产日本波多野结衣| 国产99精品久久| 久久久久亚洲精品天堂| 精品无码久久久久久尤物| 综合久久给合久久狠狠狠97色 | 亚洲国产精品久久久久久| 亚洲女久久久噜噜噜熟女| 合区精品久久久中文字幕一区| 国产成人综合久久精品尤物| 国产精品福利一区二区久久| 久久国产亚洲精品无码| 久久精品国产99久久无毒不卡| 狠狠色综合网站久久久久久久高清| 久久夜色撩人精品国产| 久久亚洲精品无码观看不卡| 久久精品国产清自在天天线| 77777亚洲午夜久久多人| 久久99国产精品成人欧美|