UdonLibrary 1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
RingBuffer

疑似可変長リングバッファです。配列の最初と最後の要素を疑似的に繋げ、リング上にした FIFO バッファです。

template <typename T, size_t Capacity>
class RingBuffer
{
T m_data[Capacity];
size_t m_head;
size_t m_tail;
size_t m_size;
};

構築

テンプレート引数に要素の型、最大要素数を指定します。最大要素数と、サイズは意味が異なるので注意してください。

template <typename T, size_t Capacity>
class RingBuffer
{
T m_data[Capacity];
size_t m_head;
size_t m_tail;
size_t m_size;
};

構築

Udon::RingBuffer<int, 256> ring(100); // サイズから構築
Udon::RingBuffer<int, 256> ring(100, 0); // サイズ、初期値から構築
Udon::RingBuffer<int, 256> ring{ 1, 2, 3, 4, 5, 6 }; // initializer_list から構築
リングバッファ
Definition RingBuffer.hpp:22

要素の追加、削除

Udon::RingBuffer<int, 256> ring{ 1, 2, 3, 4, 5, 6 };
ring.push(7);
// ring: { 1, 2, 3, 4, 5, 6, 7 }
ring.push(8);
// ring: { 1, 2, 3, 4, 5, 6, 7, 8 }
ring.pop();
// ring: { 2, 3, 4, 5, 6, 7, 8 }
ring.pop();
// ring: { 3, 4, 5, 6, 7, 8 }
void push(const_reference value)
バッファの先頭に要素を追加
Definition RingBuffer.hpp:125
value_type pop()
バッファの末尾を取得し要素を削除
Definition RingBuffer.hpp:157

イテレーション

for (auto&& it : ring)
{
it = 100;
}
ring[2] = 100; // ランダムアクセスOK

‍使用可能なイテレーターは iterator const_iterator reverse_iterator const_reverse_iterator です。