![](/img/trans.png)
[英]fixed length array data structure which allows quick reuse of arbitrary elements? C++
[英]Which way is better to create an array of fixed length in C++?
假設我已經知道要創建的數組的大小,那就設為N.
int A[N];
int *A = new int[N];
哪種方法更好/更快? 為什么呢
int a[N];
如果N
不是constexpr
,則僅在某些啟用了語言擴展的編譯器或C ++ 14編譯器中是合法的。 (“可變長度數組”)
請注意,這被視為“ C語法”,並且現代的首選方法是:
std::array<int, N> a;
這將在堆棧上創建N
整數的數組。 如果N * sizeof(int)
> =剩余堆棧大小,則可能有問題。
但是:由於它是本地對象,因此具有自動生存期-當a
超出范圍時它將消失。 在堆棧上分配內存也非常便宜。
第二個變體:
int* a = new int[N];
不需要MSVC +語言擴展或C ++ 14編譯器,這會從堆中分配與sizeof(int) * N
等價的內存。
它不會自動獲得生存期-完成后,您將需要delete[]
內存。 在堆上分配可能很昂貴,尤其是在多線程應用程序中。
在某些情況下,只能在運行時確定程序的內存需求。 然后,您應該使用:
int *A = new int[N]; //it's dynamic memory. Mean it can be change at runtime.
否則,您應該使用:
int A[N];
編譯時數組:C ++ 11有一個名為std :: array的新容器,如boost :: array,它類似於標准容器,並且可以代替傳統的C數組。
運行時數組:vector是一個不錯的選擇,創建時可以保留其大小。 其他序列容器也可以是數組。
當N很大時,您應該使用動態內存分配,否則它將給出堆棧溢出異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.