Skip to content

Latest commit

 

History

History
71 lines (54 loc) · 1.5 KB

RingBuffer.md

File metadata and controls

71 lines (54 loc) · 1.5 KB

RingBuffer

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

template <typename T, size_t Capacity>
class RingBuffer
{
    T      data[Capacity];
    size_t head;
    size_t tail;
    size_t size;
};

構築

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

template <typename T, size_t Capacity>
class RingBuffer
{
    T data[Capacity];
    size_t head;
    size_t tail;
    size_t size;
};

構築

Udon::RingBuffer<int, 256> ring;                      //
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 から構築

要素の追加、削除

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 }

イテレーション

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

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