。結構的內容隨時間變化,特別是每個嵌套矢量的長度是隨機的並隨時間變化。順序很重要,如果它是空的,我不能忽略嵌套向量。我知道嵌套矢量(比如m)和外部矢量(比如n)的最大容量。初始化我使用</p> <pre><code>vector<vector<size_t>> Ar; </code></pre> <p>結構矢量矢量
我有一些難以獲得初始化權。如果我使用
Ar(n);
是沒有問題的,但我最終得到一個內存碎片,因爲分配不知道嵌套向量的大小。如果可能,我想避免這種情況,因爲我不知道隨着我嘗試處理的數據量的增加會產生什麼樣的影響。我試圖通過預先固定嵌套向量的長度來獲得緊湊的表示形式來解決碎片問題,但是我在執行此操作時遇到了問題。我用
Ar(n,vector<size_t>(m));
但這是超級慢和大量的內存浪費,因爲大多數條目將不會被使用。
我已經成功地與一個
vector<list<size_t> > Ar(n);
實現了這個無痛苦碎片,但它的運行速度比使用嵌套向量慢得多。像Boost :: multi_array這樣的固定表示會佔用太多空間,出於與上面第二次初始化相同的原因,並且實現起來會更加困難,因爲我需要跟蹤有用條目的停止位置。
有什麼建議嗎?提前致謝。
爲什麼您的原始設計的「內存碎片」是一個問題?你是否測量過它並確定它確實是一個瓶頸? –
我測量了虛擬內存使用情況。這是否是錯誤的?我應該使用另一種工具嗎? – Plamen
我只是沒有看到你最初的做法特別錯誤。如果你有一組不同大小的集合,那麼矢量矢量似乎是合理的。如果你正在縮小容器並且擔心內存,你可以使用交換技巧,但是否則你已經在每個內部容器中獲得了良好的內存局部性...... –