2011-02-12 115 views
24

我想聲明一個2D數組併爲其賦值,而不運行for循環。二維數組值C++

我想我可以用下面的想法

int array[5] = {1,2,3,4,5}; 

工作正常初始化二維數組爲好。但顯然我的編譯器不喜歡這個。

/* 
1 8 12 20 25 
5 9 13 24 26 
*/ 

#include <iostream.h> 

int main() 
{ 
    int arr[2][5] = {0}; // This actually initializes everything to 0. 
    arr [1] [] = {1,8,12,20,25}; // Line 11 
    arr [2] [] = {5,9,13,24,26}; 
    return 0; 
} 

j:\ CPP \網格> bcc32.exe Grid.cpp

的Borland C++ 5.5.1爲Win32版權(C)1993,2000的Borland

Grid.cpp:

錯誤E2188 Grid.cpp 11:main()函數表達式語法

錯誤E2188 Grid.cpp 12:在功能主要表達式語法()

警告W8004 Grid.cpp 14: '的常用3' 被分配有從未在本功能使用 離子主()

* 2誤差編譯*

請作爲幫助一個值以什麼是用我的一組值來初始化二維數組的正確方法。

回答

41

像這樣:你用哪一個:

int main() 
{ 
    int arr[2][5] = 
    { 
     {1,8,12,20,25}, 
     {5,9,13,24,26} 
    }; 
} 

這應該由你的C++教科書覆蓋?

無論如何,更好的是,考慮使用std::vector或某些現成的矩陣類,例如,來自Boost。

+0

謝謝。我正在用C++ Vol1進行思考。但我不認爲這是具體的二維數組的章節。 – 2011-02-12 23:15:19

5

int iArray[2][2] = {{1, 2}, {3, 4}};

認爲一個2D陣列作爲數組的數組的。

9

的正確方法來初始化在C多維數組或C++是

int arr[2][5] = {{1,8,12,20,25}, {5,9,13,24,26}}; 

您可以使用此同樣的伎倆,如果你想初始化甚至更高維數組。

另外,在你最初的代碼中要小心 - 你試圖在數組中使用1-索引偏移來初始化它。這沒有編譯,但如果這樣做會導致問題,因爲C數組是0索引!

0

一種替代方法是將二維數組表示爲一維數組。這可以使元素操作更高效。你應該把它包裝在一個也包含寬度和高度的類中。

另一種替代方法是將二維陣列表示爲std::vector<std::vector<int> >。這將使您可以使用STL算法進行數組運算,並且該向量也將爲您處理內存管理。

8

只是想指出你不需要指定數組的所有維度。

最左邊的維度可以被編譯器'猜到'。

#include <stdio.h> 
int main(void) { 
    int arr[][5] = {{1,2,3,4,5}, {5,6,7,8,9}, {6,5,4,3,2}}; 
    printf("sizeof arr is %d bytes\n", (int)sizeof arr); 
    printf("number of elements: %d\n", (int)(sizeof arr/sizeof arr[0])); 
    return 0; 
}