【发布时间】:2012-10-22 09:16:17
【问题描述】:
据我了解,deque 是一个循环缓冲区,当空间不足时,它会分配新空间(如果可以的话)。有没有办法限制双端队列可以增长到? 或者确保它不会增长到最大大小的唯一方法是每次我想将数据插入到双端队列时检查?
【问题讨论】:
据我了解,deque 是一个循环缓冲区,当空间不足时,它会分配新空间(如果可以的话)。有没有办法限制双端队列可以增长到? 或者确保它不会增长到最大大小的唯一方法是每次我想将数据插入到双端队列时检查?
【问题讨论】:
是的,与每个 STL 集合一样,模板化参数之一是分配器。
因此,您可以编写自己的自定义分配器,该分配器将跟踪内存并在超出此限制时抛出 bad_alloc,即使内存可用。
顺便说一句,std::deque 通常实现为“页面”的集合,其中每个页面包含固定数量的元素。
如果你想要一个循环缓冲区实现,你可以在其中插入或删除“任何地方”,std::deque 不是最有效的使用,std::list 会是(尽管你可以使用 boost 中可用的循环集合) .
【讨论】:
deque 不是循环缓冲区;它通常实现为数组的链接集合。对于循环缓冲区,请查看 Boost 中的 circular_buffer。
【讨论】:
根据我的经验,最简单的方法是通过包装类封装双端队列并编写两个包装push_back和push_front的成员函数
【讨论】:
双端队列不是循环缓冲区。它可以实现为循环缓冲区,但实现细节对用户是隐藏的。我建议你编写一个包装类或便利函数来为你做大小检查。
【讨论】: