2011-04-07 62 views
0

我定義了一個結構作爲創建/調整數組的大小......不能使用非常量?

struct Point { 
int x, int y 
} 

我正在傳遞給函數的點陣列,以及,告訴我該數組有多少元素包含一個整數i。在這個世界中,我可以如何在數組中添加一個元素?我意識到沒有辦法只是添加新的元素,因爲陣列不能動態調整大小,所以我需要創建一個新的元素並複製每個元素......但是當我嘗試執行以下操作時:

Point newPoints[i+1]; 

我被告知它期望一個恆定的值,當然我不能給它,因爲我需要i + 1,而且我是可變的。 C++讓我難過。 (如果不是很明顯,我來自一個神聖的地方,爲你管理你所有的物品......)

P.S.我必須使用陣列...忘了提及。

+2

爲什麼你必須使用數組? – 2011-04-07 05:17:41

+0

[動態數組]可能的重複(http://stackoverflow.com/questions/232445/dynamic-arrays) – Aamir 2011-04-07 05:18:40

+0

C++有一個爲此設計的std :: vector! – 2011-04-07 07:27:11

回答

0

怕你必須在這個上使用一個新的/ malloc。我只在運行時確定,所以在編譯時它無法靜態分配它在堆棧上所需的內存。

2

在標準C++中,您不能創建具有運行時間設置大小的數組。你需要做的一個:

  1. 聲明newPoints爲指針,然後分配使用new Point[i+1]值,應用delete []它以後。
  2. 聲明newPoints使用類似boost::scoped_array,它自動管理清理。
  3. 使用非數組,例如std::vector;你可以使用&v[0]來得到一個指針。
  4. 使用非標準擴展名,例如GCC提供的擴展名。
0

你必須使用一個恆定值的原因是正在棧上創建的newPoints陣列,並做到這一點的編譯器必須知道它會如何大,在編譯的時候。爲了能夠指定動態大小,您必須使用new []和delete []或動態數據結構類(如來自STL)。