2016-12-26 69 views
-1

我剛開始學習C++。當我開始非常困惑時,我試圖掌握多維數組和向量的語法。我得到如何初始化多維數組。看起來很簡單:行後跟列。然而,載體更具挑戰性。我是否必須以相同的方式對它們進行初始化,還是要創建一個向量向量。有人請幫忙。C++中的多維向量

+2

矢量矢量(矢量...)。 – 2016-12-26 00:14:22

回答

2

聲明多維向量:

vector<vector<int> > test(4,vector<int>(20)); 

這就產生了一個2D矢量4×20。當然,因爲它們是根據需要可以被改變載體。索引與數組test[3][19]相同。

1

如果您能夠使用C++ 11,則可以以類似的方式初始化多維向量和向量向量。

int a1[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; 
std::vector<std::vector<int>> a2 = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; 

但是,在訪問元素時必須理解不同之處,而不會遇到未定義的行爲。

對於多維數組,需要連續分配數組元素的內存。對於矢量矢量,元素的內存很可能不相交。

內存爲a1

a1[0][0] a1[1][0] a1[2][0] 
|   |   | 
v   v   v 
+---+---+---+---+---+---+---+---+---+ 
| | | | | | | | | | 
+---+---+---+---+---+---+---+---+---+ 

存儲器用於a2(最有可能的):

a2[0][0] 
| 
v 
+---+---+---+ 
| | | | 
+---+---+---+ 

a2[1][0] 
| 
v 
+---+---+---+ 
| | | | 
+---+---+---+ 

a2[2][0] 
| 
v 
+---+---+---+ 
| | | | 
+---+---+---+ 

另外,也能夠矢量所定義的載體,其中列數是不相同爲每一行。

std::vector<std::vector<int>> a2 = { {1, 2, 3}, {4, 5}, {6, 7, 8, 9} }; 

在多維數組中,每列的列數保證相同。

鑑於上述多維數組a1,a1[1][2]將是一個有效元素,a1[2][3]將是一個無效元素。在向量矢量的情況下,使用上述行,a2[1][2]不是有效元素,a2[2][3]是有效元素。