• <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>

            勤能補(bǔ)拙,Expter

            成都游戲Coder,記錄游戲開發(fā)過(guò)程的筆記和心得!

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

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

                     
                    查看了接近一周的代碼和書籍有了一下總結(jié):
            1.如果不需要一個(gè)類的對(duì)象不能被隱式的轉(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    // 如果沒(méi)有加explicit,可以編譯通過(guò),加了就不能通過(guò)
            16}

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

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

            3.容器的使用,注意各種函數(shù)的參數(shù)和返回值以及各種函數(shù)使用。
               比如:關(guān)聯(lián)容器和標(biāo)準(zhǔn)容器在刪除元素的時(shí)候會(huì)不同。
                 例子:
             1對(duì)于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é)點(diǎn),并返回下一個(gè)元素,自加
             8    }

             9    else
            10    {
            11        it++;
            12    }

            13}

            14對(duì)于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èn)題,可以在網(wǎng)上查相關(guān)的說(shuō)明,

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

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


                 另外實(shí)現(xiàn)一個(gè)鎖類有很大的用處,比如
             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)于重載操作符,本周看到同事們?cè)谟懻撘粋€(gè)關(guān)于結(jié)構(gòu)體的代碼
              實(shí)例如下:
              
             1struct Test
             2{
             3    //
             4    
             5    Test & operator = (const Test &_t)
             6    {
             7        //關(guān)于此處是否需要增加一個(gè) _t與*this的判斷,
             8       memcpy(this,&t,sizeof(t));      
             9        return *this;
            10    }

            11    
            12    //
            13}
            ;
                因?yàn)樾屎桶踩膯?wèn)題,是否需要增加判斷的代碼,比如
                 if(_t == *this)
                 {
                     return *this;
                 }
               其實(shí)Effective C++的條款17: (在operator=中檢查給自己賦值)的情況已經(jīng)說(shuō)了需要增加一個(gè)自檢驗(yàn)證,我們姑且不考慮memcpy的數(shù)據(jù)重疊問(wèn)題(new placement),增加一個(gè)明顯有好處。

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

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

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

            評(píng)論

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

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

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

            第一個(gè)的好拗口  回復(fù)  更多評(píng)論   

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

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

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

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

            似乎多了個(gè)不字吧


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

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

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

            @路過(guò)的

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

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

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

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

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

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

            5.關(guān)于重載操作符,本周看到同事們?cè)谟懻撘粋€(gè)關(guān)于結(jié)構(gòu)體的代碼
            實(shí)例如下:
            1struct Test
            2{
            3 //
            4
            5 Test & operator = (const Test &_t)
            6 {
            7 //關(guān)于此處是否需要增加一個(gè) _t與*this的判斷,
            8 memcpy(this,&t,sizeof(t));
            9 return *this;
            10 }
            11
            12 //
            13}; 因?yàn)樾屎桶踩膯?wèn)題,是否需要增加判斷的代碼,比如
            if(_t == *this)
            {
            return *this;
            }

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

            亚洲午夜精品久久久久久app| 久久久久av无码免费网| 成人a毛片久久免费播放| 性做久久久久久久久老女人| 天天爽天天狠久久久综合麻豆| 国产一级做a爰片久久毛片| 欧美国产精品久久高清| MM131亚洲国产美女久久| 国产麻豆精品久久一二三| 久久男人AV资源网站| 人人妻久久人人澡人人爽人人精品| 国产精品久久久久久久久久影院 | 亚洲国产精品无码久久SM| 无码8090精品久久一区 | 一本一道久久精品综合| av无码久久久久不卡免费网站| 日韩人妻无码一区二区三区久久| 中文字幕日本人妻久久久免费| 久久久久久精品免费看SSS| 国产A三级久久精品| 麻豆成人久久精品二区三区免费| 亚洲精品乱码久久久久久蜜桃图片 | 国内精品久久久久久麻豆| 国产综合精品久久亚洲| 亚洲国产精品久久久久婷婷软件| 国产精品青草久久久久福利99 | 区亚洲欧美一级久久精品亚洲精品成人网久久久久| 国产成人综合久久精品尤物| 青青草原综合久久大伊人导航| 青青草原综合久久大伊人| 色欲av伊人久久大香线蕉影院| 72种姿势欧美久久久久大黄蕉| 亚洲欧美精品伊人久久| 亚洲精品成人网久久久久久| 天天爽天天狠久久久综合麻豆| 亚洲欧美精品伊人久久| 一级a性色生活片久久无少妇一级婬片免费放| 久久久久久久波多野结衣高潮| 国产精品久久精品| 亚洲欧洲中文日韩久久AV乱码| 色婷婷综合久久久久中文|