1. 程式人生 > >clear與erase的原理與區別

clear與erase的原理與區別

剛才把作業的B題做完。

第一次提交WA,因為輸出格式中有空格沒有注意到 -.-

第二次提交WA50%,然後新增上A.clear()才正確了。

藉此學習一下clear()與erase().

clear:(百度到的一篇部落格,但似乎是windows程式設計用的。暫且複製過來。)

       功能:將一些可用的Buffer(緩衝區)清理乾淨。

       函式原型:

    HRESULT Clear(DWORD Count,  const D3DRECT *pRects,  DWORD Flags,  
             D3DCOLOR Color,     float Z,   DWORD Stencil  
);
例: pd3dDevce->clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER ,D3DCOLOR_ARGB(0,45,50,170),1.0F.0);

第一個引數:告訴系統有多少個矩形區域要被clear。

第二個引數:說明這些要被clear的矩形陣列的指標。

          注:如果clear的範圍是整個buffer,那麼第一個引數值只要填0,第二個引數填NULL即可。

第三個引數:用來指定要被clear的是哪些buffer(可以是三個Buffer 的組合)。

         注:D3D裡相對於視窗畫面用到的buffer有三種:color buffer 、depth buffer 、stencil buffer ;color buffer 用來呈現視窗上每個pixel的顏色值,

               也就是實際見到的彩色畫面,color buffer 又稱Render Target;Depth Buffer又稱Z Buffer;Stencil Buffer 是模板 、鑄板的意思。

第四個引數:指定給Color Buffer的背景色;

第五個引數:給Depth Buffer 用的,只要pixel的Z值介於0~1,就會填入Depth Buffer;

第六個引數:指定給Stencil Buffer,上例中沒用到Stencil buffer ,所以指定為0;


erase:

erasearray: array 引數是要清除的陣列變數的名稱。 iterator erase( iterator pos );  //刪除pos指向的字元, 返回指向下一個字元的
迭代器, iterator erase( iterator start, iterator end ); //刪除從start到end的所有字元, 返回一個迭代器,指向被刪除的最後一個字元的下一個位置 basic_string &erase( size_type index = 0, size_type num = npos ); //刪除從index索引開始的num個字元, 返回*this. 引數index 和 num 有預設值, 這意味著erase()可以這樣呼叫:只帶有index以刪除index後的所有字元,或者不帶有任何引數以刪除所有字元. 原理是向前挪移一個位置。 兩者區別:  erase可以單個清除,也可以清除一段區間裡的元素。
 clear直接將所有的清除。