據我所知,deque是一個循環緩衝區,當空間用完時,它會分配新的空間(如果它可以)。有沒有辦法限制deque可以增長到? 或者確保它不會超過最大大小的唯一方法是檢查每次我想要插入數據到deque?將deque max_size設置爲最大尺寸
0
A
回答
2
是的,與每個STL集合一樣,其中一個模板化參數是分配器。
因此,即使內存可用,如果超出此限制,您可以編寫自己的自定義分配程序來跟蹤內存,並拋出bad_alloc
。
順便提一句,std::deque
通常實現爲「頁面」的集合,其中每個頁面包含固定數量的元素。
如果你想有一個循環緩衝器實現,可以插入或刪除「任何地方」,std::deque
不會是最有效的使用,std::list
將是(雖然有提升,你可以利用現有的圓形集合)。
1
deque
不是循環緩衝區;它通常作爲鏈接的數組集合來實現。對於循環緩衝區,請參閱Boost中的circular_buffer
。
0
一個deque不是一個循環緩衝區。它可以實現爲循環緩衝區,但實現細節對用戶是隱藏的。我建議你編寫一個包裝類或便利函數來爲你做大小檢查。
1
由於我的經驗最簡單的方法是通過一個包裝類封裝的雙端隊列,寫了兩個成員函數包裝push_back
和push_front
相關問題
- 1. 設置QBoxLayout最大尺寸?
- 2. 尺寸大於容器中的max_size
- 3. Java(Eclipse)WindowBuilder設置最大尺寸
- 4. BlockingCollection最大尺寸
- 5. 設置JPanel的最大尺寸內BorderLayout.CENTER
- 6. 如何設置JFrame的最大尺寸?
- 7. 設置圖像最大尺寸
- 8. 設置JFrame的最大尺寸
- 9. JAVA設置JFrame的最大尺寸
- 10. 設置一個JDialog的最大尺寸?
- 11. 最大尺寸
- 12. 如何在Android中爲ImageView設置最小和最大尺寸
- 13. 爲什麼我得到deque的max_size()小於向量的max_size()?
- 14. ICO最大尺寸
- 15. javascript最大尺寸
- 16. 有沒有辦法爲列表設置最大尺寸?
- 17. 爲mercurial hg設置最大登錄尺寸?
- 18. QGLWidget最大尺寸
- 19. ColorBox最大尺寸
- 20. NSUserDefault最大尺寸
- 21. NSUbiquitousKeyValueStore最大尺寸
- 22. 設置最大圖像尺寸爲WordPress image.php
- 23. 在vim中爲垂直窗口設置最大尺寸
- 24. 將QWebView設置爲移動尺寸
- 25. 將JPanel設置爲A4尺寸
- 26. 將img設置爲div尺寸
- 27. 使用WINAPI設置窗口的最小和最大尺寸
- 28. 設置窗口的最小和最大尺寸
- 29. 爲什麼mxCreateNumericMatrix的最大尺寸小於系統最大陣列尺寸?
- 30. Android:將ImageView(GIF)的大小設置爲源的尺寸
一個cutsom分配器似乎是錯誤的方法解決這個問題。我知道,在爲雙端隊列請求的內存量和雙端隊列的大小之間沒有嚴格的關係。例如,矢量的大小和容量之間肯定沒有這種關係。 – john
您可能指的是deque實現本身和分配器之間的關係,以及哪一個選擇頁面大小,因此您不能保證完美調整它,但是由於限制可能基於您想要的最大內存分配考慮到這個對象,你的分配器將能夠管理它,儘管你可能會發現你實際上無法準確達到閾值。 – CashCow