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

            久久久久久青草大香综合精品| 久久久久久亚洲精品不卡| 亚洲精品乱码久久久久66| 久久99精品久久久久婷婷| 国产精品激情综合久久| 亚洲精品乱码久久久久久蜜桃不卡 | 国色天香久久久久久久小说| 东京热TOKYO综合久久精品| 久久久99精品一区二区| 日韩人妻无码精品久久免费一| 久久最新精品国产| 国产成年无码久久久免费| 国产AV影片久久久久久| 午夜精品久久久久久毛片| 亚洲第一永久AV网站久久精品男人的天堂AV | 久久久久久久久无码精品亚洲日韩 | 久久香综合精品久久伊人| 日韩欧美亚洲综合久久影院d3| 精品多毛少妇人妻AV免费久久| 国产精品成人99久久久久| 精品久久无码中文字幕| 综合久久国产九一剧情麻豆 | 一本一本久久aa综合精品| 久久国产视屏| 精品久久久久久久中文字幕| 97久久精品无码一区二区天美| 一本色道久久88精品综合| 欧美久久亚洲精品| 久久精品国产一区二区三区| 国产精品午夜久久| 91精品国产综合久久香蕉 | 久久婷婷五月综合色奶水99啪| 国产香蕉97碰碰久久人人| 四虎国产精品免费久久5151| 狠狠色丁香婷婷综合久久来| 国内精品久久久久影院优| 久久久久亚洲av无码专区喷水| 蜜臀av性久久久久蜜臀aⅴ麻豆 | 久久夜色精品国产欧美乱| 中文字幕热久久久久久久| 伊人久久大香线蕉亚洲|