2014-09-21 131 views
-1

說我們有這樣的實例:如何在不知道原始數組大小的情況下增加動態數組(C++)的大小?

string* p; 
p = new string[2]; 
p[0] = "Aa"; 
p[1] = "Bb"; 

我明白了什麼:我需要創建一個臨時動態數組存儲有什麼P,刪除P,然後創建一個新的P與行1大小比大temp,然後將temp複製到p中。

我不明白:如何在不知道原始行大小的情況下增加p的大小(在本例中爲2)並仍保留原始數據。我讀過關於做技巧,如(sizeof(array)/ sizeof(dataType)),但由於我有一個動態數組,我不知道如何找到它的大小。 realloc會格式化我的原始數據,再加上它對字符串很有趣。

只是站起來:我不想使用任何形式的鏈表,矢量或那種性質的東西。

+1

使用'std :: vector'。 – 2014-09-21 04:18:07

+7

幫你個忙,用'vector '代替。回答你的問題 - 首先你不知道大小的數組有什麼用處?忘了擴展它 - 如果你不知道它的大小,你將如何使用它?您需要以這種或那種方式跟蹤當前的尺寸。 – 2014-09-21 04:18:18

+0

你不能僅僅使用指針來確定它。您需要在其他位置存儲數組維度,或者使用一些標記條目標記最後一個元素。 – cdhowie 2014-09-21 04:18:31

回答

0

你可以做到以下幾點:

string* p; 
p = new string[2]; 
p[0] = "Aa"; 
p[1] = "Bb"; 

string* reallocated = new string[3]; 
std::copy(p,p+2,reallocated); // Save your original values 
delete[] p; // release formerly allocated memory 
p = reallocated; // Assign newly allocated memory 
p[2] = "Cc"; // Add some additional element 

不管怎樣,我看不到一個點,要做到這隻需使用std::vector<std::string>>的偏好。

+0

我很欣賞快速反應,我明白通常人們會使用矢量。我主要關心的是如何在沒有存儲大小的情況下獲取動態數組中的元素數量,因此您寫道:string * reallocated = new string [3]但請記住問題是計算機如何理解使用3. – Lzak 2014-09-21 05:28:42

+0

@Lakak電腦無法猜測。他們像吐司一樣愚蠢。 – fredoverflow 2014-09-21 07:03:40

+1

代碼中存在一個錯誤:使用「delete []」而不是「delete」來釋放分配的數組。 – Sunius 2014-09-21 17:15:07

相關問題