Array Circular em C++

Quer criar um algoritmo que utilize somente os últimos valores adicionados em um array fixo? Esse método é chamado de Circular Buffer, ou seja, quando você adiciona um novo valor no array, você está sobrescrevendo o próximo valor do array.

Pensando em um vetor, é como se todos os valores recuassem uma posição, com isso removendo o primeiro valor do vetor e alterando o ultimo valor do vetor.

A imagem abaixo explica como funciona o Array Circular.

queue08b

Boost Circular Buffer

Caso você não queira desenvolver o seu array circular, você pode utilizar uma biblioteca pronta que a Boost disponibiliza chamada Boost::circular_buffer.

Exemplo de Uso

#include <iostream>
#include <boost/circular_buffer.hpp>

int main(){
    // declarando um array circular de inteiros de 3 posições
    boost::circular_buffer<int> cb{ 3 };

    // adicionando o valor 0, 1 e 2
    cb.push_back(0);
    cb.push_back(1);
    cb.push_back(2);

    /** ouput:
    /* 0
    /* 1
    /* 2 **/
    std::cout << "output:" << std::endl;
    for (int i : cb) std::cout << i << std::endl;

    cb.push_back(3);
    cb.push_back(4);

    /** ouput:
    /* 2
    /* 3
    /* 4 **/
    std::cout << "output:" << std::endl;
    for (int i : cb) std::cout << i << std::endl;

    return 0;
}

 

Links de Referências

http://www.boost.org/doc/libs/1_61_0/doc/html/circular_buffer.html
https://theboostcpplibraries.com/boost.circularbuffer

Tem alguma dúvida ou sugestão? Deixe nos comentários!

Deixe um comentário