• <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ù)  更多評論   

            2020最新久久久视精品爱| 囯产精品久久久久久久久蜜桃| 久久久久久精品久久久久| 精品久久久久久久久免费影院| 婷婷国产天堂久久综合五月| 亚洲av成人无码久久精品| 国产欧美久久久精品| 久久嫩草影院免费看夜色| 狠狠色噜噜色狠狠狠综合久久| 国产麻豆精品久久一二三| 人人狠狠综合久久亚洲| 久久综合给久久狠狠97色| 久久福利片| 国产亚洲欧美精品久久久| 青青热久久国产久精品 | 欧美日韩中文字幕久久久不卡 | 色8激情欧美成人久久综合电| 中文字幕日本人妻久久久免费| 香蕉久久夜色精品国产小说| 久久99九九国产免费看小说| 国产精品久久久久久久| 久久久久久久久波多野高潮| 日韩精品国产自在久久现线拍| 亚洲av成人无码久久精品| 一级A毛片免费观看久久精品| 9191精品国产免费久久| 精品久久久久久国产潘金莲| 久久久久久国产精品美女| 青青草国产97免久久费观看| 九九热久久免费视频| 青青青伊人色综合久久| 99久久99这里只有免费的精品| 午夜久久久久久禁播电影| 久久只有这里有精品4| 亚洲婷婷国产精品电影人久久| 久久久综合香蕉尹人综合网| 久久国产乱子伦精品免费午夜| 久久精品国产福利国产秒| 久久99精品国产麻豆宅宅| 久久精品欧美日韩精品| 久久精品国产亚洲AV电影|