2013-02-25 64 views
0

我想構建一個寬度矩陣的類。在它的構造函數中,它想知道數組的高度和寬度,並且它想要數組本身,然後必須能夠打印數組並重載某些運算符。該數組必須是一個浮點數組。這是我到目前爲止有: 兩個定義的參數:使用多維數組

#define HEIGHT 3 
#define WIDTH 3 

使得陣列:

void Assignment_1::start(){ 
    float **matrix = new float *[HEIGHT]; 
    for (int i = 0; i < HEIGHT; i++){ 
     matrix[i] = new float[WIDTH]; 
    } 
    // 5 6 11 
    // 7 2 8 
    // 5 1 4 
    matrix[0][0]=5; 
    matrix[0][1]=6; 
    matrix[0][2]=11; 
    matrix[1][0]=7; 
    matrix[1][1]=2; 
    matrix[1][2]=8; 
    matrix[2][0]=5; 
    matrix[2][1]=1; 
    matrix[2][2]=4; 
    Matrix * matrixA = new Matrix(HEIGHT,WIDTH,matrix); 
    matrixA->printMatrix(); 
} 

現在我明白,一個C++二維數組HEIGHT指針的正常排列的存在,每個指向一個WIDTH大小的數組。

構造函數和全局變量:

Matrix::Matrix(int width, int height, float **array){ 
    this->height = height; 
    this->width = width; 
    this->array = array; 
} 
//in Matrix.h: 
int width, height; 
float ** array; 

直到此時一切都很好。現在我想實際打印出來使用數組:

void Matrix::printMatrix(){ 
    for (int h = 0; h < height; h++){ 
     for (int w = 0; w < width;w++){ 
      std::cout <<array[height][width]<<" "; 
     } 
     std::cout << std::endl; 
    } 
} 

而這正是它出錯:程序只是簡單地崩潰。我有點爲什麼它崩潰:我想我需要得到什麼數組[h]指向(這是一個浮點數組的大小寬度),但試圖做到這一點給了我錯誤:不能將float *轉換爲float [] *。我需要做什麼?

+5

陣列[高度] [寬度] - >陣列並[h] [W]。另外,std :: vector。另外,boost.multiarray。還有https://gist.github.com/rmartinho/3959961 – 2013-02-25 11:26:02

+0

哦。輸入錯誤。在我完全理解多維數組之後,我會查看矢量,但是我仍然在學習,所以我不想急於模板,直到我知道基本知識。 – Cheiron 2013-02-25 11:30:52

+1

std :: vector *是基礎知識。手動內存管理是先進的東西。 – 2013-02-25 11:32:54

回答

3

The robot already answered your question:

for (int h = 0; h < height; h++){ 
    for (int w = 0; w < width;w++){ 
     std::cout <<array[height][width]<<" "; 
        //  ^^^^^^ ^^^^^ 
    } 
    std::cout << std::endl; 
} 

,您在訪問什麼條目?那麼,總是array[height][width]。但是,array僅包含height元素,因此此訪問會導致未定義的行爲。簡單地套用你的循環變量hw

for (int h = 0; h < height; h++){ 
    for (int w = 0; w < width;w++){ 
     std::cout << array[h][w]<<" "; 
    } 
    std::cout << std::endl; 
} 

但儘管如此,這是很不理想。您應該使用一個類型,是更容易使用,例如std::vector

typedef std::vector<float> float_vector; 
typedef std::vector<float_vector> float_matrix; 
float_matrix matrix(HEIGHT,float_vector(WIDTH)); 

std::vector是最重要的類型之一。掌握它。

1

這是因爲2維數組和指針指針不相同。你可以試試

float ** array float(* array)[size]?

和變化陣列[高度] [寬度]至陣列並[h] [W]

1
void Matrix::printMatrix(){ 
    for (int h = 0; h < height; h++){ 
     for (int w = 0; w < width;w++){ 
      std::cout <<array[h][w]<<" "; 
     } 
     std::cout << std::endl; 
    } 
} 

不高度和寬度 - 它是你陣列的大小,使用你迭代H,W