据我所知,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