Порядок индексации повышающего кольцевого буфера, C ++ - PullRequest
0 голосов
/ 05 ноября 2018

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

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

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

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

1 Ответ

0 голосов
/ 05 ноября 2018

Да, 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;
}
...