circularbuffers
On goodliffe.net
Further afield
C++ circular buffer library
This is a simple C++ library (supplied entirely in one header file) that provides an STL-compliant circular buffer class.
Whilst it's entirely useful in it's own right, and will work predictably with the standard C++ alogrithms, it has also been the basis of a couple of Overload articles on writing STL-style template container classes. (See the publications page for information on these articles).
Compatibility
The circular buffer class is not at all platform specific. All that is required to compile it is a sufficiently standards complient compiler. It has been built on the following compilers:
- gcc 2.95.3 - gcc 4
- Microsoft Visual C++ 6.0
Download
The current code version is 1.0. It is available in the following source file: circular-1.0.tar.gz
Example of use
So how do you use this little puppy? Its hardly rocket science. Here's some example code to show you it in action.
int main()
{
// create a circular buffer of ints with capacity 20
circular_buffer cbuf(20);
// Add 15 elements
for (int n = 0; n < 15; ++n) cbuf.push_back(n*2);
// Copy them to cout
std::copy(cbuf.begin(), cbuf.end(), std::ostream_iterator(std::cout));
// Add 10 more elements
for (int n = 0; n < 10; ++n) cbuf.push_back(n*2);
// Note now that 5 elements will have been consumed from the back of the buffer,
// replaced by new data!
// Print and consume each element
while (!cbuf.empty())
{
std::cout << "element:" << cbuf.front();
pop_front();
}
// done
return 0;
}