2014-05-15 49 views
2

如果我有MyClass類的元件的固定數量,我應該使用陣列或向量?,即:我應該使用矢量而不是數組嗎?

MyClass* myArray[]; 

std::vector<MyClass*> myVector; 

+2

可能是'std :: array'。這取決於你有多少元素。如果太多,你可能不得不使用'std :: vector'。 – juanchopanza

+1

如果元素由當前範圍中的當前實例管理器管理,則使用'std :: array '或'std :: array '否則。 – Pixelchemist

+2

也考慮使用類的向量而不是指針向量。除了你正在做多態或共享所有權之外,指針在這裏沒有任何用處,在這種情況下,智能指針比裸指針要好得多。 – Manu343726

回答

5

使用std::array或原始陣列的元素一個小的,靜態數量的障礙。

如果你有很多元素(比如說100kb),你會使用堆棧並且要求堆棧損壞/溢出。在這種情況下,或者只有在運行時才能知道元素的數量,請使用std::vector

+0

std :: array和raw數組的區別是什麼?不是std :: array與數組相同,但指定了命名空間? – Tatanan

+1

這可能會成爲一個很好的單獨問題。對於初學者來說,有http://en.cppreference.com/w/cpp/container/array – tenfour

2

如果您知道編譯時的編號 - 請使用靜態array

如果數量是動態的(從用戶獲得的) - vector是更好的爲您節省管理存儲

2

「固定」在這方面有兩個含義。通常的設置是設置一次,永不改變,如從輸入讀取的值。該值在運行時已知,並且需要在堆上進行動態分配。你的選擇是一個C風格的數組,新的或一個向量;強烈建議你使用矢量。

#include <vector> 
#include <iostream> 
int main() { 
    int size; 
    std::cin >> size; 
    int *myArray = new int[size]; 
    std::vector<int> myVector(size); 
} 

「固定」也可以指一個編譯時間常數,這意味着它是在程序的任何運行不變。您可以使用C風格的數組或C++數組(堆棧中的自動內存分配)。

#include <array> 
int main() { 
    const int size = 50; 
    int myArray[size]; 
    std::array<int, size> myArray; 
} 

這些更快,但您的程序需要訪問足夠的堆棧內存,這是您可以在項目設置中更改的內容。有關更多信息,請參閱this topic。如果數組的大小非常大,則可能要考慮在堆上分配(矢量)。

+2

+1,但*「靜態內存分配(堆棧)。」*刪除這些單詞。可能會造成靜態存儲時間的混淆。 – Manu343726

+1

*自動*是編輯 –

+0

的標準術語。希望它現在不那麼困惑和更正確。 – Gaminic

相關問題