0

据我了解, deque 是一个循环缓冲区,当它用完空间时,它会分配新空间(如果可以的话)。有没有办法限制双端队列可以增长到?或者确保它不会超过最大大小的唯一方法是每次我想将数据插入到双端队列时检查?

4

4 回答 4

2

是的,与每个 STL 集合一样,模板化参数之一是分配器。

因此,您可以编写自己的自定义分配器,该分配器将跟踪内存并bad_alloc在超出此限制时抛出,即使内存可用。

顺便说一句,astd::deque通常实现为“页面”的集合,其中每个页面包含固定数量的元素。

如果您想要一个可以在“任何地方”插入或删除的循环缓冲区实现,std::deque那么使用起来并不是最有效的std::list(尽管您可以使用 boost 中的循环集合)。

于 2012-10-22T09:19:38.177 回答
1

deque不是循环缓冲区;它通常实现为数组的链接集合。对于循环缓冲区,请查看circular_bufferBoost。

于 2012-10-22T09:20:32.777 回答
1

根据我的经验,最简单的方法是通过包装类封装双端队列并编写两个成员函数包装push_backpush_front

于 2012-10-22T09:55:04.460 回答
0

双端队列不是循环缓冲区。它可以实现为循环缓冲区,但实现细节对用户是隐藏的。我建议您编写一个包装类或便利函数来为您进行大小检查。

于 2012-10-22T09:22:20.297 回答