2013-03-18 131 views
0

我需要將我設置爲M的矩陣複製到新矩陣M2中並輸出該矩陣。如何複製矩陣?

這怎麼辦?

這裏是我試過到目前爲止:

#include <iostream> 

using namespace std; 
#define N 24 
void copy(int M[][N], int M2[][N], int ROWS, int COLS) 
{ 
    int r, c; 
    M2[r][c]= M[r][c]; 
    cout<< M2[r][c]; 
} 

void print(int M[][N], int ROWS, int COLS) 
{ 
    int r, c, row, col; 
    row= 1; 
    col= 1; 
    M[row][col] = 2; 
    for(r=0; r< ROWS; r++) 
    { 
     for(c=0; c < COLS; c++) 
     { 
      if(M[r][c]==0) 
      { 
       cout<<" "; 
      } 
      else if (M[r][c]==1) 
      { 
       cout<< "T"; 
      } 
      else if (M[r][c]==2) 
      { 
       cout<< "*"; 
      } 
      else 
      { 
       cout << M[r][c]; 
      } 
     } 

     cout <<endl; 
    } 
} 

void fill(int M[][N], int ROWS, int COLS, int row, int col) 
{ 
    int r, c;  
    for(r=0; r< ROWS; r++) 
    { 
     for(c=0; c < COLS; c++) 
     { 
      if (r == 0 || r == ROWS - 1) { 
       M[r][c]=0; 
      } 
      else if(c == 0 || c == COLS -1) { 
       M[r][c]=0; 
      } 
      else { 
       M[r][c]= 1; 
      } 
     } 
    } 
} 

int main() 
{ 
    int M[N/2][N]; 
    int M2[N/2][N]; 
    int ROWS, COLS; 
    int r, c; 
    ROWS = sizeof(M)/sizeof(M[0]); 
    COLS = sizeof(M[0])/sizeof(M[0][0]); 
    fill(M, ROWS, COLS, 1, 1); 
    print(M, ROWS, COLS); 
    copy(M, M2, ROWS, COLS); 

    return 0; 
} 
+0

頂部它說void複製(......)在那裏我設置M2 [r] [c] = M [r] [c]然後cout << M2 [r] [c]但我得到的輸出不等於M [r] [c] – polishusar 2013-03-18 21:51:27

回答

2

這裏有一個問題:

int r, c; 
M2[r][c]= M[r][c]; 

你永遠不分配rc,它們包含一些未知的價值,這很可能是超出範圍0..ROWS-10..COLS-1

不要使用未初始化的值,,特別是在指針運算中。

要複製整個矩陣,您可能需要一些循環,就像您在print函數中那樣。

+0

感謝您的幫助! – polishusar 2013-03-18 22:28:48

0

由於您正在使用二維數組來存儲矩陣,因此一個副本應該像調用memcpy一樣簡單。任何數組的內容(不論維數)都連續存儲在內存中。

在複印功能,只需將下面的代碼行中:

memcpy(M2, M1, r * c * sizeof(int)); 

中的memcpy之前,請確保您有一個分配給R和C(適當的值顯然這應該是正確的號碼行和正確的列數)。