2014-12-07 84 views
0

當聲明一個像std::array<std::string, 5> myArray = ...這樣的字符串數組時,它是如何存儲在內存中的?如何在C++中存儲字符串數組?

在一個數組中,元素應該按順序存儲在內存中,而且任何第k個元素都應該可以通過索引在常量時間內訪問,那麼它如何處理可變長度的字符串呢?

回答

2

有固定大小的正常數組string對象(按順序在內存中)。每個字符串的實際數據在另一個存儲單元中分別分配。

-2

我發現:

的結構結合了C風格 陣列與一個標準集裝箱的好處,如明知其 自己的大小,支持任務的性能和可訪問性,隨機訪問迭代器等。

一般來說,知道這種結構的存儲器佈局並不重要,但存取器和修飾符的複雜性並不重要。保證訪問是在不變的時間內完成的。我懷疑在幕後你有一個C陣......

+0

並不總是重要的,但這就是問題的關鍵 – Xocoatzin 2014-12-07 11:00:40

+0

這不可能是重點,因爲你(一般來說)不能直接訪問結構! – 2014-12-07 11:01:32

0

Overloaded operator []可用於std::array。與普通數組一樣,std :: array按順序存儲元素。因此,第k個元素仍然可以在一段時間內被訪問。

+0

要小心,按順序存儲元素並不能保證隨機訪問時間不變:想象一個鏈表。 – 2014-12-07 11:00:22

+0

@ Jean-BaptisteYunèsLinklist不會按順序存儲元素。 – 2014-12-07 11:01:48

+0

@pranitkothari是的,它的確如此。從某種意義上說,它們的定義明確。 – juanchopanza 2014-12-07 11:17:59

0

std::string通常實現爲指向某種可變長度存儲的指針。它沒有魔法。它可以像任何其他固定大小的對象一樣存儲在一個數組中。 「可變大小」部分是間接的,數組不關心它。

相關問題