-4
A
回答
3
有一些東西,結構和數組的共同點,但他們一般被認爲是概念上獨立的。您可能能夠使用其中之一的一種情況是,如果您想存儲已知數量的所有相同類型的變量。
我建議使用陣列如果正在存儲數據是一系列其中每個值具有一些不同的上下文的相同的含義,和一個struct如果每個值具有不同的含義。
E.g.
要存儲的一系列最高溫度值的單週。每個值的含義是一樣的,都是最高溫度,讓你用一個數組:
std::array<int, 7> week_max_temperatures;
你想存儲一天的最高和最低溫度和降雨總量。該類型的每個值是相同的,int
,但含義是不同的,所以你用一個結構來避免混淆最低溫度,最高溫度圖和雨量:
struct DailyWeatherData
{
int max_temperature_deg_c;
int min_temperature_deg_c;
int total_rainfall_mm;
};
這裏是它們的異同列表:
的Structs:
- 數據成員可以是不同類型的組合,但部件的類型和數量是固定在編譯時。
- 可以有靜態和實例方法。
- 是否能夠複製使用
operator=()
(除非通過拷貝構造刪除禁止或包括不可複製件)。 - 是否當作爲函數參數傳遞(除非作爲參考或指針進行傳遞)複製。
- 數據存儲在對象中。它們存儲在內存中的位置取決於它們是被定義爲局部變量還是使用
new
進行分配。如果後者那麼你是負責內存管理。
C風格數組:
- 可以包含任何數量的元素,所有這些都是相同類型的。該類型在編譯時設置,並且在運行時創建數組時設置元素的數量。
- 不能有用戶定義的方法與它們相關聯。
- 可複製,但只能通過
std::copy
或memcpy
而不是operator=()
。 - 當作爲函數參數傳遞時,指針衰減。
- 數據存儲在內存中取決於數組是作爲局部變量創建的還是使用
new[]
分配的。如果後者那麼你是負責內存管理。在任何一種情況下,數組變量都像是一個指向實際數據的指針。
- 可以包含任何數量的元素,所有這些都是相同類型的。元素的類型和數量是在編譯時設置的。
- 不能有與之相關的用戶定義的方法(忽略子類)。
- 可以使用
operator=()
進行復制。 - 是否當作爲函數參數傳遞(除非作爲參考或指針進行傳遞)複製。
- 數據存儲在對象中。它們通常不是使用
new
分配的,所以內存管理不是問題。
- 可以包含任何數量的元素,所有這些都是相同類型的。該類型在編譯時設置,元素的數量可以在運行時更改。
- 不能有與之相關的用戶定義的方法(忽略子類)。
- 可以使用
operator=()
進行復制。 - 是否當作爲函數參數傳遞(除非作爲參考或指針進行傳遞)複製。
- 數據存儲在對象之外,內存管理自動處理。
相關問題
- 1. WPF和Silverlight之間的相似之處
- 2. Django和Rails之間的相似之處
- 3. python字符串和C字符數組之間的相似性
- 4. MVC和MVVM之間的區別和相似之處是什麼?
- 5. 差/ XSD之間的相似之處:any和xsd:我讀anyType的
- 6. .NET語言之間有什麼區別和相似之處?
- 7. JBI和SCA之間有什麼不同/相似之處
- 8. WordNet的相似之處java
- 9. 在C++/C之間傳遞結構中的字符串/數組#
- 10. DockerHub和GitHub的相似之處
- 11. 在函數之間傳遞結構C++
- 12. 相似性和FIteagle和OpenIot之間的差異構架
- 13. 相同數據類型的結構和數組之間的區別是什麼?
- 14. Scala特性與Java 8接口之間有什麼區別和相似之處?
- 15. 查找兩個數組之間的餘弦相似度
- 16. 在結構和字節數組之間轉換
- 17. 結構和類之間的區別?
- 18. 結構在C和C++之間的差異
- 19. 結構之間的鑄造?
- 20. 文件之間的結構
- 21. Haskell和C之間交換結構化數據
- 22. lua和C之間共享數組
- 23. 結合不同的相似之處建立一個最終相似
- 24. 匹配算法的相似之處
- 25. ASP.NET Core&Node.js的相似之處
- 26. 不相容C和C++之間代碼
- 27. 類和結構之間的相互作用
- 28. 兩個字符串之間的相似
- 29. 語句之間的語義相似性
- 30. 顏色之間的相似性
這個問題有什麼問題嗎? – AMS
這是不是很清楚你正在尋找什麼樣的答案。結構和數組之間沒有真正的相似之處。你期望什麼樣的相似之處。他們是完全不同的東西 –
他們包含「東西」? – Drop