我有一大堆特定類型的對象,其中每個對象都可以分配一個雙轉移來保存同一類型的其他對象。我使用deque,因爲我需要在兩端快速訪問,並且因爲任何特定對象都可能引用許多其他對象。像大量項目上的deque一樣,但小數目內存使用量小?
但是,許多或甚至大部分對象都指的是其他很少的對象。在這種情況下,deque的內存使用量非常大。我使用的實現是在第一次push_back()後立即分配4096個字節。 deque中的每個元素只有8個字節。這是浪費了太多空間,尤其是因爲我製作了許多這樣的對象,因此也導致了許多這樣的對象。同時,我非常需要一個deque(或類似的東西),因爲正如我所說,任何特定的對象實際上都可以引用許多其他對象,儘管大多數對象指的是其他對象。
我的第一個想法是使用capacity()和reserve()來增加自我deque,但是我的編譯器告訴我在deque上沒有這樣的函數。
所以,我在想也許是寫一個類似deque的接口的類,這個接口是一個向量和一個deque,其中的向量用於存儲16個元素之後,然後這個vector被扔掉,從那裏開始使用deque。
由於只有在只有少量元素時才使用向量,因此push_front()和pop_front()在速度方面效率會很低,因爲我可以使用capacity()和reserve()來控制向量,當存在更多元素時,deque使用大量內存應該無關緊要。
但是,在滾動我自己的類之前,我想查看是否已經存在這樣的事情。此外,如果有人知道任何原因,我沒有想到爲什麼這樣的事情是一個壞主意,或者如果有人有任何相關的建議,我很樂意聽到它。
在此先感謝。
事實上,`std :: deque`沒有`capacity()`或`reserve()`,因爲它不會將其元素存儲在一個大塊中。 – 2011-01-14 17:47:46