2012-10-22 120 views
0

據我所知,deque是一個循環緩衝區,當空間用完時,它會分配新的空間(如果它可以)。有沒有辦法限制deque可以增長到? 或者確保它不會超過最大大小的唯一方法是檢查每次我想要插入數據到deque?將deque max_size設置爲最大尺寸

回答

2

是的,與每個STL集合一樣,其中一個模板化參數是分配器。

因此,即使內存可用,如果超出此限制,您可以編寫自己的自定義分配程序來跟蹤內存,並拋出bad_alloc

順便提一句,std::deque通常實現爲「頁面」的集合,其中每個頁面包含固定數量的元素。

如果你想有一個循環緩衝器實現,可以插入或刪除「任何地方」,std::deque不會是最有效的使用,std::list將是(雖然有提升,你可以利用現有的圓形集合)。

+0

一個cutsom分配器似乎是錯誤的方法解決這個問題。我知道,在爲雙端隊列請求的內存量和雙端隊列的大小之間沒有嚴格的關係。例如,矢量的大小和容量之間肯定沒有這種關係。 – john

+0

您可能指的是deque實現本身和分配器之間的關係,以及哪一個選擇頁面大小,因此您不能保證完美調整它,但是由於限制可能基於您想要的最大內存分配考慮到這個對象,你的分配器將能夠管理它,儘管你可能會發現你實際上無法準確達到閾值。 – CashCow

1

deque不是循環緩衝區;它通常作爲鏈接的數組集合來實現。對於循環緩衝區,請參閱Boost中的circular_buffer

0

一個deque不是一個循環緩衝區。它可以實現爲循環緩衝區,但實現細節對用戶是隱藏的。我建議你編寫一個包裝類或便利函數來爲你做大小檢查。

1

由於我的經驗最簡單的方法是通過一個包裝類封裝的雙端隊列,寫了兩個成員函數包裝push_backpush_front