Ускорить порядок индексации кольцевого буфера, C++

При добавлении элементов в boost/circular_buffer.hpp с push_back, можно ли предположить, что больший индекс означает более поздний вставленный элемент?

Точнее, в моем случае, чтобы последние вставки были более весомыми:

double weighted_running_average(const boost::circular_buffer<double> &x) 
{
          return (x[0] + 2*x[1] + 3*x[2]) / 6;
}

или это приведет к непредсказуемому порядку важности?


person Audrius Meskauskas    schedule 05.11.2018    source источник
comment
о каком индексе вы говорите? при использовании push_back не используется какой-либо индекс   -  person user7860670    schedule 05.11.2018
comment
При доступе. В этом примере индексы 0, 1 и 2.   -  person Audrius Meskauskas    schedule 05.11.2018


Ответы (1)


Да, circular_buffer - это контейнер последовательности, поэтому при использовании push_back новый элемент всегда будет доступен по наивысшему индексу, а порядок ранее вставленных элементов не изменится. Если буфер заполнен, то первый элемент будет стерт, а индекс всех существующих элементов уменьшится на 1.

Пример (онлайн-компилятор)

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

int main()
{
    ::boost::circular_buffer<int> x;
    x.set_capacity(2);
    x.push_back(0);
    x.push_back(1);
    std::cout << x[0]; // 0
    std::cout << x[1]; // 1
    x.push_back(2);
    std::cout << x[0]; // 1
    std::cout << x[1]; // 2
    return 0;
}
person user7860670    schedule 05.11.2018