簡體   English   中英

數組之間的區別<int, size>名稱和整數名稱[大小]</int,>

[英]Difference between array<int, size> name and int name[size]

我找到了兩種創建數組的方法。 它們之間有什么區別?

  1. array<int, 5> arr = {5, 8, 1, 3, 6};
  2. 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 int5的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM