memcpy
 作用: Copy block of memory
 用法:memcpy(指向destination的指標, 指向source的指標, 要copy幾個byte)
new
 作用:C++動態配置記憶體
 介紹:依所指定之型別與陣列大小配置一塊等大的記憶體
    可以為其設定初值
    return 該塊記憶體的起始位址
    通常需要一指標來接收回傳值,以存取所配置的記憶體空間
 格式:
  變數型別* 指標 = new 變數型別;  //不指定初值
  變數型別* 指標 = new 變數型別(初始值);  //指定初值
 
  變數型別 *指標名 = new 變數型別[陣列長度];  //一維陣列
  //多維陣列
  變數型別 (*指標名)[陣列長度2] = new 變數型別[陣列長度1] [陣列長度2];
  變數型別 (*指標名)[陣列長度2] [陣列長度3]= new 變數型別[陣列長度1][陣列長度2] [陣列長度3];
  ex: int *p3 = new int[10];
    double (*p4)[4] = new double[3][4];
    double (*p5)[4][5] = new double[3][4][5];
 
因為memcpy只能複製連續記憶體,所以要自製具有連續記憶體的動態陣列 see here
template < typename T >
T **Allocate2DArray( int nRows, int nCols){
    T **pp;
    T *p;
    T *curPtr;
    //(step 1) 宣告一個指標陣列的空間,內容指向元素陣列 each row 的開頭。pp指向指標陣列的起始位置。
    pp = new T*[nRows];
    //(step 2) 宣告一個元素陣列的空間。p指向元素陣列起始位置。
    p = new T [nRows * nCols];
    //(step 3) 將指標陣列裡的指標,指向元素陣列的正確位置。
    curPtr = p;
    for( int i = 0; i < nRows; i++){
        *(pp + i) = curPtr;
         curPtr += nCols;
    }
    return pp;
}
template < typename T >
void Free2DArray(T** Array){
    delete [] *Array;
    delete [] Array;
}
 
使用
 型態  **變數名稱 = Allocate2DArray<型態> ( 行數, 列數 )
  例:double **A = Allocate2DArray<double> ( 5, 7 );   //宣告5列7行的 double 二維陣列
 Free2DArray ( 變數名稱 ) 
  例:Free2DArray(A);
 可以像一般陣列一樣assign值
  例:A[2][5] = 0.5
文章標籤
全站熱搜
創作者介紹
創作者 Y CP 的頭像
Y CP

Y CP的部落格

Y CP 發表在 痞客邦 留言(0) 人氣(2,551)