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

vector containing only the last n-elements

本文关键字:元素 向量 包含 最后      更新时间:2023-10-16

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

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

我不知道这有多好。有没有更好的方法可以做到这一点?

局限性:

  • 它必须是一个向量

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

我认为这是一个更干净,更好的实现:

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))。

您应该使用已经模拟所需 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
}