讓a
是一個數組。那麼a.size()
和sizeof(a)
之間有什麼區別?如何檢索數據類型的大小?
回答
a.size()
爲您提供專門針對班級的價值。例如字符串或列表的長度。這取決於班級的類型和實施它的人員。但通常size
就像在列表中一樣有意義。
Sizeof是一個運算符,如果您是初學者程序員,您應該避免這種運算符。它被廣泛用於C到alloc
內存中。它會返回對象在內存中佔用的空間量。在C++中,我們使用new
來動態分配內存。這很容易。有關sizeof的更多信息:http://en.wikipedia.org/wiki/Sizeof
不確定a.size(),但sizeof(a)返回其長度爲的字節。如果您想要數組中的元素數量,請將其除以每個元素的大小。例如:
int size = sizeof(myArray)/sizeof(*myArray);
但我認爲兩者的數據類型都是size_t – avinash 2011-03-17 07:28:21
挑剔:它是以char元素爲單位的大小。也就是說,如果'CHAR_BIT'是16,那麼'sizeof(uint32_t)'將是2。 – 2011-03-17 08:09:34
如果a
是一個數組 -
int a[5] ; // Taking it as an array that can hold integers.
現在 -
a.size(); // Error. `a` is not a class type to use `.` operator on it.
sizeof(a); // Correct. It returns 20 because 5*4 bytes.
sizeof
是一元運算符,它返回數據類型的大小,在數字節。
sizeof(std::array<int, 3>) == sizeof(int[3]) == 3 * sizeof(int)
class Foo
{
int a, b;
};
sizeof(Foo) == sizeof(int) * 2
size()
是template<typename T, size_t S> std::array<T,S>
方法返回數組中元素的數目。
std::array<int, 3> a = {1,2,3};
a.size() == 3;
.size()
可以返回任何東西,取決於它是如何實現的。
反正.size()
通常返回容器的大小,換言之 - 元件的數量,該容器包含。
sizeof
運算符是集成運算符,它返回分配在堆棧上的字節數。例如
char a[50];
char* b = new char[50];
cout << sizeof(a) << '\n';
cout << sizeof(b);
打印50(這是50 * sizeof(char) = 50 * 1 = 50
),第二行打印8 - 因爲這是指針的大小(我的機器是64,這就是爲什麼它是8,如果我有32位CPU ,它會是4)。
cout << sizeof(*b);
將打印1,爲*b
取消引用指針和返回數組的第一個元素(這是一樣sizeof(b[0])
這是sizeof(char)
)
換句話說,你最好依靠.size()
,如果你想查看元素的數量,如果它是一個容器,並且它提供了這樣的方法,當然。
其他例如:
class A
{
int a;
char b[100];
};
class B
{
int a;
char* b;
public:
B()
{
b = new char[100];
}
~B()
{
delete[] b;
}
};
int main()
{
cout << sizeof(A) << '\n';
cout << sizeof(B) << '\n';
B b;
cout << sizeof(b) << '\n';
return 0;
}
第一個,在x64 plarform,將打印104,因爲我們有100*sizeof(char) + sizeof(int) (=4)
(注104 mod 8 == 0
,你就會明白爲什麼);
第二個和第三個將打印相同。 但是請注意,我們在這裏對齊!在x64,對準是在圖8B中,所以sizeof(char *)
給出8,sizeof(int)
給出4,這使得12 BUT12 mod 8 == 4
其!= 0,所以由於取向的,sizeof(B)
打印(16模8 == 0 )。
所以,當你使用sizeof
,必須非常小心..
希望幫助(:
你對名單的問題,看看這個:
list< int > lint;
list< char > lchar;
cout << sizeof(lint) << '\n';
cout << lint.size() << '\n';
cout << sizeof(lchar) << '\n';
lint.push_back(10);
lint.push_back(10);
cout << lint.size() << '\n';
cout << sizeof(lint) << '\n';
所有運營商sizeof
將打印相同,取決於執行std::list
。但第一個.size()
將返回0,因爲沒有元素,第二個將返回2,因爲我們有2個e在列表中出現。
sizeof(a)
是a
使用的字節數,不包括任何動態分配的內存。這是一個編譯時間常量。你也可以使用它的類型,sizeof(int)
給你一個int的字節數。
a.size()
通常爲容器類型定義,並給出容器中當前元素的數量(而不是字節數)。這是一個運行時值,在您從容器中添加或刪除對象時發生更改。
- 1. 如何修復數據類型大小?
- 2. Mongoid數據類型檢索
- 3. iOS:TouchJSON&檢索的數據大小
- 4. 數據庫數據類型大小
- 5. Umbraco數據類型。檢索可能的數據類型列表。
- 6. 減少數據類型大小會導致索引超過最大大小?
- 7. OSX和iOS數據類型的大小
- 8. 如何檢索泛型類型的類型參數?
- 9. 如何記住.NET數據類型的存儲大小?
- 10. 如何預測C中特定數據類型的大小?
- 11. 如何計算可空的大小<T>數據類型
- 12. 如何從大型數據集中重複檢索一定數量的數據?
- 13. 提取數據類型大小PostgreSQL
- 14. 獲取數據類型字節大小
- 15. MPLAB IDE數據類型大小
- 16. 如何從具有類型的數據庫中檢索值
- 17. 如何存檔和檢索大型HTML數據集?
- 18. 如何搜索大型XML數據集?
- 19. POCO :: PostgreSQL檢索JSON數據類型
- 20. SQL Server:檢索數據類型長度
- 21. EnvDTE從CodeElement檢索數據類型
- 22. 檢索大型Firebase數據庫的表面數據
- 23. 檢索最大列大小
- 24. 如何解決數據類型大小限制?
- 25. 如何處理大小如10G的大型數據文件?
- 26. 如何從光標類檢索數據
- 27. 如何找到兩個整數類型的最大(大小)?
- 28. 如何使用Hibernate從數據庫中檢索列的Java數據類型?
- 29. 檢索類型參數
- 30. 如何檢查數據類型
聲明和究竟是什麼類型? – Shinnok 2011-03-17 07:28:15
對這個問題的所有答案都是猜測。您需要提供更多信息。也許是一個小代碼示例。 – 2011-03-17 08:19:36