[英]difference between two syntax new( int[ size ] ) and new int[ size ]
[英]Difference between array<int, size> name and int name[size]
我找到了兩種創建數組的方法。 它們之間有什么區別?
array<int, 5> arr = {5, 8, 1, 3, 6};
int arr[5] = {5, 8, 1, 3, 6};
我還發現我可以在1中使用arr.size()
,但我必須在2中使用sizeof(arr)/sizeof(*arr)
。
TYPE NAME[SIZE]
一直是聲明數組的方式,C++ 繼承自 C
OTOH std::array
是 C++11 中的新功能。 這是一個將舊數組包裝在里面的結構。 它有一個名為size()
的成員來獲取內部數組的元素數。 一個普通的數組沒有任何方法,所以很明顯你不能那樣得到大小
當您可以使用 sizeof() 時,使用指針來查找長度是什么?
sizeof
返回以字節為單位的大小,而不是元素的數量。 而且您不需要使用指針來獲取長度。 sizeof(arr)/sizeof(arr[0])
和sizeof(arr)/sizeof(int)
是兩種常用的獲取大小的方法,后者在更改數組類型時更容易出錯
普通數組也會衰減為指針,因此您無法在函數中獲取它的大小。 您必須事先使用sizeof
獲取大小並將大小顯式傳遞給 function。 std::array
具有有關大小的信息,因此在函數內部知道大小,但是您需要編寫一個模板來處理不同的數組大小,這會導致相同 function 的多個實現,因為模板化類型的每個實例化都是不同的類型。 在這種情況下,傳遞數組的指針和大小是更好的解決方案
array<int, 5> arr = {5, 8, 1, 3, 6}
這需要#include <array>
。 您正在創建一個接受模板 arguments int
和5
的 object (屬於 class array
)。 通過使用此容器,您可以受益於內置的size()
成員 function。
int arr[5] = {5, 8, 1, 3, 6};
這是一個簡單的 C 風格數組聲明。 這不是來自任何 class 的 object,也不需要聲明任何 header。 您需要使用戶定義的size()
function。 請注意,您正在嘗試獲取指向 integer 的指針的大小 – sizeof(arr) / sizeof(*arr)
以字節為單位返回元素的大小。 您需要改用sizeof(arr) / sizeof(arr[0])
- 所以這會返回元素的總數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.