• <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,記錄游戲開發(fā)過程的筆記和心得!

            一周總結(jié),讀書筆記

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

                     
                    查看了接近一周的代碼和書籍有了一下總結(jié):
            1.如果不需要一個類的對象不能被隱式的轉(zhuǎn)換,可以在構(gòu)造函數(shù)前增加關(guān)鍵字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// 要轉(zhuǎn)換可以使用
            18if (a == static_cast<int> b[i])
            19{
            20    ..
            21}

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

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

             9    else
            10    {
            11        it++;
            12    }

            13}

            14對于vector等標(biāo)準(zhǔn)容器的元素刪除
            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關(guān)于2者區(qū)別主要是erase返回值問題,可以在網(wǎng)上查相關(guān)的說明,

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

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


                 另外實現(xiàn)一個鎖類有很大的用處,比如
             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的聲明周期結(jié)束,釋放資源

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

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

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

            個人總結(jié)不代表其他意見。。

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

            評論

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

            不錯哦,你已經(jīng)工作啦,主要具體做些什么工作呀?你的方向是什么呀?
            我走游戲編程這條路 呵呵 現(xiàn)在還沒什么工作經(jīng)驗?zāi)?nbsp; 回復(fù)  更多評論   

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

            第一個的好拗口  回復(fù)  更多評論   

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

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

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

            >>>如果不需要一個類的對象不能被隱式的轉(zhuǎn)換

            似乎多了個不字吧


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

            能這么做嗎  回復(fù)  更多評論   

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

            @路過的

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

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

            ding yi xia   回復(fù)  更多評論   

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

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

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

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

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

            欧美一级久久久久久久大| 亚洲熟妇无码另类久久久| 久久av无码专区亚洲av桃花岛| 久久天天躁狠狠躁夜夜2020 | 99久久精品国产一区二区| 亚洲精品无码久久久影院相关影片| 久久男人AV资源网站| 精品久久久无码中文字幕| 亚洲国产精品久久久久久| 99re久久精品国产首页2020| 久久精品午夜一区二区福利 | 一本一本久久a久久综合精品蜜桃| 久久久久久久综合日本| 久久狠狠一本精品综合网| 久久精品中文字幕有码| 无码8090精品久久一区| 伊人久久一区二区三区无码| 久久精品国产欧美日韩99热| 噜噜噜色噜噜噜久久| 伊人久久综合无码成人网 | 99精品国产99久久久久久97| 久久人人爽人人爽人人av东京热| 亚洲精品成人网久久久久久| 99精品国产免费久久久久久下载| 99精品久久精品一区二区| 人妻无码αv中文字幕久久琪琪布| 人妻少妇久久中文字幕 | 久久久久国产成人精品亚洲午夜| 久久艹国产| 久久人人爽人人人人片av| 国内精品久久久久影院优| 色综合色天天久久婷婷基地| 久久er国产精品免费观看8| 久久久久久国产精品美女| av午夜福利一片免费看久久| 国产香蕉97碰碰久久人人| 久久精品中文字幕大胸| 久久久久亚洲AV无码永不| 国产香蕉97碰碰久久人人| 久久精品国产亚洲AV不卡| 青青青国产成人久久111网站|