2010年2月6日 星期六

C/C++筆記-使用memset加快二維陣列初始

一般方法是用雙迴圈來設定二維陣列的值
這裡使用memset來設定陣列初值
##ReadMore##
#include <cstring>

const int X_SIZE = 60;
const int Y_SIZE = 30;

int matrix[X_SIZE][Y_SIZE];

inline void init_matrix() //使用inline加快
{
  //設定陣列內的值全為-1
  memset(matrix, -1, sizeof(matrix));
}

PS:
memset(matrix, 1, sizeof(matrix)); //會失敗
memset為字元填入的函式,整數由2或4個位元組(字元)組成
設定的值是0x01,但存入的值卻是0x0101,而導致錯誤的答案
而-1則是0xFF,存入的值是0xFFFF,不會影響答案

C/C++筆記-inline 將函式直接放到主程式

當程式碼很小時,在函式宣告加入inline的特性
編譯器會將函式直接放到主程式,而不會使用呼叫的方式
可加快速度,但會多占用記憶體
在類別中宣告的函式會自動加入inline

//inline用在函式程式碼少,執行效率較高
inline int square(int value)
{
  return(value*value)
}

##ShowAll##

C/C++筆記-複製建構式與解構式

解構式
stack::~stack(){}

複製建構式

stack::stack(const stack& old_stack);

##ReadMore##
範例:
stack a_stack;
a_stack.push(2);
stack b_stack(a_stack); //複製a-stack資料給b_stack

C/C++筆記-explicit 明確的建構式

explicit要求建構式寫法必須一般化

/*可使用兩種方式來建構*/
class ex1
{
  ex1(int size);
}
ex1 init1(10);
ex1 init2 = 10;


/*只可使用一種方式來建構*/
class ex2
{
  explicit ex2(int size);
}
ex2 init1(10);
##ShowAll##

C/C++筆記-使用包裝結構節省空間

包裝結構可節省空間,但取出的資料機器碼可能很大,處理速度會變慢
只適用int和enum,以位元為單位
比位元運算相比,較易理解,但較無彈性

//此結構總共只要4個byte
struct info {
  int valid:1; //只有1個位元,只有0或1的值
  int data:31; //只有31個位元
}
##ShowAll##