提升环形缓冲区索引顺序,C++
Boost ring buffer indexing order, C++
用push_back向boost/circular_buffer.hpp添加元素时,是否可以假设较大的索引意味着较晚插入的元素?
更准确地说,就我而言,要使最近的插入更重要:
double weighted_running_average(const boost::circular_buffer<double> &x)
{
return (x[0] + 2*x[1] + 3*x[2]) / 6;
}
或者这会导致不可预测的重要性顺序吗?
是的,circular_buffer
是一个序列容器,因此当您使用 push_back
时,新元素始终可以在最高索引处访问,并且先前插入的元素的顺序不会改变。如果缓冲区已满,则第一个元素将被擦除,所有现有元素的索引将减少 1。
示例 (online compiler)
#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;
}
用push_back向boost/circular_buffer.hpp添加元素时,是否可以假设较大的索引意味着较晚插入的元素?
更准确地说,就我而言,要使最近的插入更重要:
double weighted_running_average(const boost::circular_buffer<double> &x)
{
return (x[0] + 2*x[1] + 3*x[2]) / 6;
}
或者这会导致不可预测的重要性顺序吗?
是的,circular_buffer
是一个序列容器,因此当您使用 push_back
时,新元素始终可以在最高索引处访问,并且先前插入的元素的顺序不会改变。如果缓冲区已满,则第一个元素将被擦除,所有现有元素的索引将减少 1。
示例 (online compiler)
#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;
}