仅包含最后n个元素的向量

时间:2014-01-18 12:04:14

标签: c++ vector

我尝试获取某种仅包含最后n个元素的缓冲区。因此,如果新值到达,则忘记缓冲区中的最后一个。到目前为止我所做的是:

vector<double> buf;
buf.assign(n,0);

while(1) {
  memcpy(&buf[1],&buf[0],sizeof(double)*(n-1));
  buf[0] = SomeNewDouble;
}

我不知道这是多么的执行。有更好的方法吗?

限制:

  • 它必须是一个载体

操作系统:Linux使用gcc / g ++(

2 个答案:

答案 0 :(得分:2)

我认为这是一个更清洁,更好的实施:

buf.pop_back();
buf.insert(buf.begin(), newVal);

如果您对性能表示不满,并且进行了比(随机)访问操作更多的修改,则可以使用(链接)std::list代替:

std::list<double> list;
list.pop_back();
list.push_front(newVal);

std::list::pop_back()std::list::push_front()都是及时的(O(1))。

答案 1 :(得分:0)

您应该使用已经模拟所需FIFO行为的std::queue

const int n;                     // your n
std::queue<double> buffer;

for (int i = 0; i < n; ++i)      // initialize with n zeros
    buffer.push(0);

while (true) {
    buffer.pop();                // forget last one
    buffer.push(SomeNewDouble);  // push new one
}