2010-03-03 62 views
11

我有一個vector<set<char> >數據結構(事務數據庫),我想知道它的大小。當我使用sizeof()與每個set<char>大小爲24時,儘管該集合包含3,4或5個字符。後來,當我使用sizeof()與vector<set<char> >時,大小爲12 ...我想這不是知道數據結構大小的方法。任何幫助? 謝謝。sizeof()一個向量

+8

sizeof()是一個編譯時操作符 – 2010-03-03 16:54:16

回答

18

你想要vector::size()set::size()

假設v是你的載體,這樣做:

size_t size = 0; 
for (vector<set<char> >::const_iterator cit = v.begin(); cit != v.end(); ++cit) { 
    size += cit->size(); 
} 

sizeof()是給你在內存中的大小的對象/鍵入它被施加到,在sizeof(char)(通常一個字節)的倍數。如果你想知道的內存大小的容器和它的元素,你可以這樣做:

sizeof(v) + sizeof(T) * v.capacity(); // where T is the element type

+0

如果他已經保留了它的向量呢? – 2010-03-03 17:12:23

+1

@John:如果他*有*,該怎麼辦? 'reserve()'與* size()沒有任何關係。 – 2010-03-03 17:17:45

+0

我認爲約翰意味着如果你想知道矢量(和內容)佔據多少內存,你應該看看容量,而不是大小。 「容器及其元素的內存大小」當然是不明確的,但我懷疑它更可能被理解爲與矢量分配的內存量有關,而不是當前被元素佔用的內存量。 – 2010-03-03 18:35:00

2

sizeof()在編譯時計算,所以沒有辦法它可以告訴你有多少元素它有內部。

使用矢量對象的size()方法。

7

sizeof返回對象本身的大小。如果它包含指針陣列例如它不會計數陣列的大小,它將計數(在32位4)載體使用指針的唯一尺寸.size

0

使用vector::size()成員函數找出項目數的矢量。提示 - 他們被分配到免費商店。

5

向量使用內部指針來實現實際存儲。因此,sizeof()將始終返回不包含數據存儲本身的相同結果。請嘗試使用vector::size()方法。這將返回矢量中元素的數量。

1

在STL vector是類模板,當你給模板參數內<SomeType>以下矢量,C++編譯器產生的代碼爲一個類類型SOMETYPE的。因此,當您使用push_back填充矢量時,實際上是插入另一個對象SomeType,因此當您從編譯器請求.size()時,它會提供您插入的SomeType對象的數量。
希望有幫助!

+1

那麼這是一個圍繞穀倉的答案......誰說他正在使用'push_back'以及它是如何相關的? vector與模板有關的事實如何?但至少你得到了'size()'是OP正在尋找的點。 – 2010-03-03 17:16:50

+1

@STingRaySC 我試圖向OP解釋sizeof與他/她想要的無關。他(/她)應該在尋找的是.size()方法。 – 2010-03-03 18:04:17