2017-09-14 118 views
0

所以基本上,我需要的是有28,800個值可以被索引訪問,並且都可以設置爲true或false。使用一個bool或整數數組不是一個選項,因爲大小需要在rumtime期間使用參數進行設置。使用矢量速度太慢,內存密集。我是C++新手,因此對如何解決這個問題沒有任何想法,任何人都可以提供幫助嗎?在C++中創建一個巨大的國旗圖

編輯:謝謝所有的人評論!就像我說的那樣,我是C++編程的新手,你的回答確實幫助我理解了向量背後的功能。 因此,在所有人都說矢量不是很慢之後,我再次檢查,結果發現我的程序運行速度很慢,因爲我在填充矢量時遇到了另一個錯誤。但特別是midor的和一些程序員夥計的答案幫助我使程序運行速度比以前更快,所以謝謝!

+5

爲什麼使用一個矢量「速度太慢,內存密集」?什麼是「太慢」?什麼是「太記憶密集型」?你不會比'std :: vector '得到更少的內存密集度' – user463035818

+0

如果'std :: vector'太慢並且內存密集,恐怕這種方式無法保存。你需要將它們分頁。 – Quentin

+0

矢量如何變慢?對於'std :: vector '有一個節省空間的專業化,而且還有'std :: bitset'具有固定的大小。 –

回答

5

使用矢量的方式太慢,內存密集。

C++專門爲std::vector<bool>所以它只使用盡可能多的內存,因爲它需要。每個「標誌」一位(當然+記帳開銷)。

如果您事先知道它的大小(您不會根據您的問題),或者您知道位圖只包含極少的設置位(例如50'中的1位) 000,但你需要測量一個更復雜的實現是否值得)。對於稀疏的位圖,存儲設置位的std::unordered_set<std::uint32_t>可能是一個選項。

但28'800是一個非常小的數字,所以不要浪費你的時間在優化。你不會從中獲得任何好處。