boost::circular_buffer

トップページ > コンテナとイテレータ >

abstract

必要なヘッダ
<boost/circular_buffer.hpp>
出来ること
循環バッファ
リファレンス
en

sample

サンプルの動作確認バージョン [GCC4.4/1.40.0] [VC9/1.40.0]

#include <iostream>
#include <boost/circular_buffer.hpp>
using namespace std;

int main()
{
	boost::circular_buffer<int> buf(3); // サイズ上限 3 のバッファ

	buf.push_back(1); // 右端に1を足す
	buf.push_back(2); // 右端に2を足す
	buf.push_front(3); // 左端に3を足す
	cout << buf[0] << " " << buf[1] << " " << buf[2] << endl; // 3 1 2

	buf.push_front(4); // 左端に4を足す。右の2は消える
	cout << buf[0] << " " << buf[1] << " " << buf[2] << endl; // 4 3 1

	buf.pop_back(); // 右端の1を消す
	cout << buf[0] << " " << buf[1] << endl; // 3 1
}

実行結果

3 1 2
4 3 1
4 3

etc

固定長のメモリ領域を最初に確保して、 その領域をリング状に使うことで、サイズ上限までなら push/pop _ back/front が O(1)、ランダムアクセス可能、 と非常に効率的に振る舞うSTL互換のコンテナです。 サイズを超えると反対側の端を消して上書きします。 タスクの待ち行列等々、サイズ上限を固定できるような状況でとても便利です。

presented by k.inaba (kiki .a.t. kmonos.net) under CC0