据我所知,deque是一个循环缓冲区,当它耗尽空间时,它会分配新的空间(如果它可以)。有没有办法限制deque可以成长? 或者确保它不会超过最大大小的唯一方法是每次我想要将数据插入到双端队列时进行检查?
答案 0 :(得分:2)
是的,与每个STL集合一样,其中一个模板化参数是分配器。
因此,即使内存可用,您也可以编写自己的自定义分配器来跟踪内存并抛出bad_alloc
。
顺便说一下,std::deque
通常被实现为“页面”的集合,其中每个页面包含固定数量的元素。
如果你想要一个循环缓冲区实现,你可以插入或删除“任何地方”,std::deque
将不是最有效的使用,std::list
将是(尽管有一些循环集合可用于提升你可以使用)。
答案 1 :(得分:1)
deque
不是循环缓冲区;它通常实现为链接的数组集合。对于循环缓冲区,请查看Boost中的circular_buffer
。
答案 2 :(得分:1)
根据我的经验,最简单的方法是使用包装类封装deque并编写包含push_back
和push_front
的两个成员函数
答案 3 :(得分:0)
双端队列不是循环缓冲区。它可以实现为循环缓冲区,但实现细节对用户是隐藏的。我建议你写一个包装类或便利函数来为你做大小检查。