當聲明一個像std::array<std::string, 5> myArray = ...
這樣的字符串數組時,它是如何存儲在內存中的?如何在C++中存儲字符串數組?
在一個數組中,元素應該按順序存儲在內存中,而且任何第k個元素都應該可以通過索引在常量時間內訪問,那麼它如何處理可變長度的字符串呢?
當聲明一個像std::array<std::string, 5> myArray = ...
這樣的字符串數組時,它是如何存儲在內存中的?如何在C++中存儲字符串數組?
在一個數組中,元素應該按順序存儲在內存中,而且任何第k個元素都應該可以通過索引在常量時間內訪問,那麼它如何處理可變長度的字符串呢?
有固定大小的正常數組string
對象(按順序在內存中)。每個字符串的實際數據在另一個存儲單元中分別分配。
我發現:
的結構結合了C風格 陣列與一個標準集裝箱的好處,如明知其 自己的大小,支持任務的性能和可訪問性,隨機訪問迭代器等。
一般來說,知道這種結構的存儲器佈局並不重要,但存取器和修飾符的複雜性並不重要。保證訪問是在不變的時間內完成的。我懷疑在幕後你有一個C陣......
Overloaded operator []
可用於std::array
。與普通數組一樣,std :: array按順序存儲元素。因此,第k個元素仍然可以在一段時間內被訪問。
要小心,按順序存儲元素並不能保證隨機訪問時間不變:想象一個鏈表。 – 2014-12-07 11:00:22
@ Jean-BaptisteYunèsLinklist不會按順序存儲元素。 – 2014-12-07 11:01:48
@pranitkothari是的,它的確如此。從某種意義上說,它們的定義明確。 – juanchopanza 2014-12-07 11:17:59
std::string
通常實現爲指向某種可變長度存儲的指針。它沒有魔法。它可以像任何其他固定大小的對象一樣存儲在一個數組中。 「可變大小」部分是間接的,數組不關心它。
並不總是重要的,但這就是問題的關鍵 – Xocoatzin 2014-12-07 11:00:40
這不可能是重點,因爲你(一般來說)不能直接訪問結構! – 2014-12-07 11:01:32