簡體   English   中英

C++:使用 sizeof() 除法查找向量的大小

[英]C++: Using sizeof() division to find the size of a vector

我正在嘗試將向量的大小作為數字獲取,以便可以將其用作constexpr

vector.size()返回一個不是常量表達式的大小類型。 因此,我想使用sizeof(vector) / sizeof(vector[0])來獲得一個 integer 值,我可以在 constexpr 初始化中手動使用它。

const vector<int> int_vec = {1, 2, 3, 4, 5, 6, 7, 8, 9};
cout << sizeof(int_vec) / sizeof(int_vec[0]) << endl;

我的 CLion 編譯器總是打印 6。我不明白為什么。 任何幫助將不勝感激。

感謝您的回復。 我了解到我可以使用sizeof(arr) / sizeof(arr[0])來查找數組的長度。 那么這對向量如何不起作用?

vector.size()不是constexpr的原因是std::vector會隨着您向其中添加數據而增長; 它具有在編譯時未知的可變大小。 (這就是constexpr的意思,表達式的值在編譯時是已知的。)

sizeof (vector)得到的是vector class 的內存表示的大小,這與其中存儲了多少元素無關。 這顯然是不正確的,因為vector是 class 名稱,而不是變量名稱,因此它不可能返回任何特定向量的大小。

使用sizeof int_vec ,順便說一下不需要括號,因為sizeof是一個運算符,而不是 function,更合理一點,因為至少你問的是一些特定向量的大小,而不是一般的所有向量。 但同樣的問題是您將獲得內存中表示的大小,這必須被修復。 畢竟,您可以在堆棧上實例化一個,因此它必須具有某個固定大小,以便 C++ 知道為它分配多少空間。 它不能在您向其中添加元素時就地擴展,因為它會覆蓋堆棧上的其他數據。 它必須有一些指向動態分配的 memory 的內部指針來存儲元素。 當您執行sizeof int_vec時,您將獲得此指針和其他內部數據所需的空間,而不是元素本身所需的空間。

如果您想要一個大小在編譯時固定的類數組容器,請嘗試std::array

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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