2013-03-13 141 views
0

是否可以在C++中向現有數組添加一個或多個維度?例如,我有2維數組,在某處我需要添加一個或多個維度到這個數組。將維添加到數組

回答

0

你不能這樣做隱含。你必須創建一個新的數組n維和複製所需的值

int new_array[10][10][10]; 

// copy using a loop or a std::-function 
2

不管如何,作爲poitroae已經提到的,您將需要某種形式的副本。然而,如果你用一維數組模擬二維和三維陣列,這個副本會加速很多,這就是爲什麼我決定首先發佈一個答案。

爲了模擬具有一維數組的二維和三維數組,您可以使用簡單的數學方法來索引數組。這降低了內存分割速度,因爲有更多的chache命中。要添加維度,您只需創建適當大小的另一個一維數組,並複製當前數據。

我會提供一個例子,當我可以找到代碼,我已經做到了這一點。

編輯:顯然以上不是他想要的。我會在下面再試一次

你有:一維數組模擬二維數組。

看起來好像你不希望實際上將整個維度添加到數組中,只是矩陣。 (基本上調整從一種尺寸到另一種同時保持數據)

所以,在這裏是一個例子:

你有一個3×3(U = 3,V = 3)下面

邏輯表示矩陣:

|3 5 6| 
|7 2 5| 
|1 0 2| 

物理表示(INT [3 * 3] 「基質」)

[3, 5, 6, 7, 2, 5, 1, 0, 2] 

- 轉換到一個4x4(X = 4,Y = 4) -

int* newMatrix = new int[X*Y]; 
for(int i = 0; i < Y; i++) 
{ 
    for(int k = 0; k < X; k++) 
    { 
     //copy from old if it falls in bounds 
     if(k < U && i < V) 
     { 
      newMatrix[i*X + k] = matrix[i*U + k]; 
     } 
     //Otherwise, zero out 
     else 
     { 
      newMatrix[i*X + k] = 0; 
     } 
    } 
} 
delete [] matrix; 

這應該給你一個4x4 newMatrix。

按道理:

|3 5 6 0| 
|7 2 5 0| 
|1 0 2 0| 
|0 0 0 0| 

身體:

[3, 5, 6, 0, 7, 2, 5, 0, 1, 0, 2, 0, 0, 0, 0, 0,] 

如果你使用的變量像我一樣,你應該能夠只要編寫一個函數,將做到這 任何矩陣爲你給它準確的參數(矩陣的X和Y尺寸)

要走另一條路 - 縮小尺寸 - 它應該是一個類似的設置(雙循環)你在哪裏檢查你是否在限制範圍內,只有在你的情況下才能複製。如果不是,你根本不要複製任何東西。我會讓你寫那個。

我希望這是更多你正在尋找。我在錯誤的背景下跳上了維度。決定在矩陣方面更多地考慮答案。

+0

實際上我不知道有多少維度提前添加我的矩陣。我會等你的例子。 – 2013-03-13 17:50:04

+0

根據給你什麼樣的數據,你可以計算出尺寸並創建一維數組,只需這樣做: int * matrix = new int [X * Y];其中X和Y是XxY矩陣的尺寸 – 2013-03-13 17:53:20

+0

從那裏您可以使用寬度和偏移量將數組索引到數組中。我會盡快提供上面的例子。 – 2013-03-13 17:55:46