2017-06-03 162 views
3

我有一個類,其中它是受保護的部分我需要聲明一個未知大小的數組(大小作爲參數給予構造函數),所以我環顧四周,發現出,最好的可能的解決方案是聲明指針數組,每個元件指向整數:指針數組和指針指向一個數組在C++

int* some_array_; 

和簡單地在構造我將使用「新」的操作符:

some_array_ = new int[size]; 

它的工作原理,我的問題是:我可以在沒有定義si的情況下在類中聲明一個數組澤?如果是的話,我該怎麼做,如果沒有,那麼爲什麼它的指針而不是一個正常的數組?

編輯:我知道vecotrs會解決這個問題,但我不能在我的HW

+0

你可能不想保護數據 - 它幾乎總是一個壞主意。並使用std :: vector,而不是一個顯式動態分配的數組。 –

+1

有兩種定義數組的方法... 1.在編譯int Name [10]時定義的大小,然後在堆棧中...您不需要delete命令,因爲它會自動刪除當你走出這個空間時。 2.一個動態數組int * Name = new int [n],然後它在堆上。所以它會一直持續到你說delete []名稱 – Thomas

+1

'some_array_'不是一個指針數組,它是一個指向數組第一個元素的指針。一個指針數組是'int * x [size]';一個指向數組'int(* x)[size]'的指針。 – molbdnilo

回答

0

你總是可以使用矢量使用它們。在你的代碼的頂部#include <vector>,然後定義矢量如下:要做到這一點,添加此行的代碼

vector<int> vectorName;

請記住,向量陣列和不應該被視爲因此。例如,在一個循環中,您想要檢索像這樣的矢量的元素:vectorName.at(index)而不是這樣:vectorName[index]

+0

你們知道,向量很容易解決這個問題,問題是我不能使用他們對我的任務:( –

1

您必須從編譯器的角度思考它是如何工作的。一個指針使用特定數量的空間(通常是4個字節),並且您使用新的操作符請求更多空間。但是空數組使用多少空間?它不能是0字節,編譯器無法知道在沒有任何元素的情況下爲數組分配什麼空間,因此它是不允許的。

0

假設你有一個大小爲2的整數數組。所以你有Array [0,1] 數組是連續的memery字節,所以如果你聲明瞭一個然後你想添加一個或多個元素結束在這個數組中,確切的下一個位置(在這種情況下:在索引2(或第三個整數))很有可能已經被分配,所以在這種情況下,你不能這樣做。一個解決方案是創建一個新的數組(在這種情況下有3個元素),將初始數組複製到新的數組中,並在最後一個位置添加新的整數。顯然這有很高的成本,所以我們不這樣做。

在C++中解決此問題的方法是Vector,Java中是ArrayLists。