Boost 之circular_buffer

来源:互联网 发布:js计算一年中的某天 编辑:程序博客网 时间:2024/05/16 19:51

circular_buffer

是一个符合STL的容器。它是一种类似于std::list 或std::deque 的序列。

它支持随机访问迭代器,在缓冲区头部或尾部的常量时间插入和删除操作,与std 算法的互操作能力。circular_buffer 被特别设计为提供固定容量的存储大小。当其容量被用完时,新插入的元素会覆盖缓冲区头部或尾部(取决于使用何种插入操作)的元素。

这种特性适合用于在real time pricing中固定(or changeing) window。 e.g  FFT 中更新data

circular_buffer 仅在创建时、显式调整容量时,或需要重新调整大小或赋值操作时才进行内存分配。另一方面,还有一个circular_buffer_space_optimized 可用。它是circular_buffer 的一个适配器,它不在创建时分配内存,而是在需要时分配内存。


用法: 

#include <boost/circular_buffer.hpp> int main(int /*argc*/, char* /*argv*/[]) { // 創建一個容量為3個整數的循環緩衝區。 boost::circular_buffer<int> cb(3); // 插入一些元素到緩衝區。 cb.push_back(1); cb.push_back(2); cb.push_back(3); int a = cb[0]; // a == 1 int b = cb[1]; // b == 2 int c = cb[2]; // c == 3 // 現在緩衝已滿,再插入元素將覆寫最前面的元素。 cb.push_back(4); // 用 4 覆蓋 1. cb.push_back(5); // 用 5 覆蓋 2. // 現在緩衝區包含 3, 4 和 5. a = cb[0]; // a == 3 b = cb[1]; // b == 4 c = cb[2]; // c == 5 // 可以從前端或後端彈出元素。 cb.pop_back(); // 5 被刪除。 cb.pop_front(); // 3 被刪除。 int d = cb[0]; // d == 4 return 0; }

更多请参阅:

http://boost.ez2learn.com/libs/circular_buffer/doc/circular_buffer.html

0 0
原创粉丝点击