2015-04-30 62 views
-2

我創造了這個功能改變動態數組大小的變化

size = 4; //this is what size is in my code 

int *list = new int[size] // this is what list 

void dynArray::doubleSize() 
{ 

int *temparray; 
    int currentsize = size; 
    int newsize = currentsize * 2; 

    temparray = new int[newsize]; 

    for (int i = 0 ; i < newsize;i++) 
    { 
    temparray[i] = list[i]; 
    } 

    size = newsize; 
    delete [] list; 
    list = new int[size]; 
    list = temparray; 


    // this it help see if i made any changes 
    cout << sizeof(temparray) << "temp size:\n"; 
    cout << sizeof(list) << "list size:\n"; 
    cout << size << "new size:\n\n\n"; 
} 

我希望它輸出的動態數組的大小數組的大小是功能在它每次更改size.I知道時間可以做到這一點與載體,但我想知道如何做到這一點與陣列

我可以做什麼不同,以實現這一目標。

+0

什麼是'尺寸'?什麼是'列表'?你如何運行這些代碼?另外'sizeof(temparray)'和'sizeof(list)'不會返回數組中元素的個數。 – Shoe

回答

0

你的問題代碼:

問題1

以下for循環使用訪問list出結合的索引的元素的在list號是size,不newSize

您需要將條件更改爲i < size;

然後,您需要弄清楚如何初始化temparray中其餘項目。

問題2

以下各行會導致內存泄漏。

list = new int[size]; 
list = temparray; 

您使用new分配內存,並立即在第二行中丟失該指針。

回答你的問題

要打印的新的大小,你可以使用:

cout << "new size: " << size << "\n"; 

不過,我不會建議把這樣的代碼中該功能。 IMO正在使您的課程取決於std::cout,因爲沒有多大好處。

1

您不能:C++標準沒有提供訪問動態數組維度的機制。如果你想知道它們,你必須在創建陣列時記錄它們,然後看看你設置的變量(就像你在程序結束時掛起size來打印)。