2017-01-30 70 views
-4

C++中的結構和數組之間是否有任何相似之處?C++:結構和數組之間的相似之處?

我想知道看到這種問題的因爲二者都是不同的,因爲一個是用戶定義的數據類型,並與連續的存儲器位置存儲其它導出的數據類型。

+0

這個問題有什麼問題嗎? – AMS

+2

這是不是很清楚你正在尋找什麼樣的答案。結構和數組之間沒有真正的相似之處。你期望什麼樣的相似之處。他們是完全不同的東西 –

+0

他們包含「東西」? – Drop

回答

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::copymemcpy而不是operator=()
  • 當作爲函數參數傳遞時,指針衰減。
  • 數據存儲在內存中取決於數組是作爲局部變量創建的還是使用new[]分配的。如果後者那麼你是負責內存管理。在任何一種情況下,數組變量都像是一個指向實際數據的指針。

std::array

  • 可以包含任何數量的元素,所有這些都是相同類型的。元素的類型和數量是在編譯時設置的。
  • 不能有與之相關的用戶定義的方法(忽略子類)。
  • 可以使用operator=()進行復制。
  • 是否當作爲函數參數傳遞(除非作爲參考或指針進行傳遞)複製。
  • 數據存儲在對象中。它們通常不是使用new分配的,所以內存管理不是問題。

std::vector

  • 可以包含任何數量的元素,所有這些都是相同類型的。該類型在編譯時設置,元素的數量可以在運行時更改。
  • 不能有與之相關的用戶定義的方法(忽略子類)。
  • 可以使用operator=()進行復制。
  • 是否當作爲函數參數傳遞(除非作爲參考或指針進行傳遞)複製。
  • 數據存儲在對象之外,內存管理自動處理。