首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我应该使用哪个STL容器作为FIFO?

我应该使用哪个STL容器作为FIFO?
EN

Stack Overflow用户
提问于 2009-08-11 20:45:27
回答 5查看 97.6K关注 0票数 102

哪种STL容器最适合我的需求?我基本上有一个10个元素宽的容器,在这个容器中我不断地push_back新的元素,同时pop_front最老的元素(大约一百万次)。

我目前正在使用std::deque来完成这项任务,但我想知道std::list是否会更有效率,因为我不需要重新分配自己(或者我可能把std::deque误认为std::vector了?)。或者有没有更高效的容器来满足我的需求?

附言:我不需要随机访问

EN

Stack Overflow用户

发布于 2020-06-12 03:12:42

这个例子很简单,你可以自己写。这里有一些非常适用于使用STL占用太多空间的微控制器的情况。这是将数据和信号从中断处理程序传递到主循环的好方法。

代码语言:javascript
运行
复制
// FIFO with circular buffer
#define fifo_size 4

class Fifo {
  uint8_t buff[fifo_size];
  int writePtr = 0;
  int readPtr = 0;
  
public:  
  void put(uint8_t val) {
    buff[writePtr%fifo_size] = val;
    writePtr++;
  }
  uint8_t get() {
    uint8_t val = NULL;
    if(readPtr < writePtr) {
      val = buff[readPtr%fifo_size];
      readPtr++;
      
      // reset pointers to avoid overflow
      if(readPtr > fifo_size) {
        writePtr = writePtr%fifo_size;
        readPtr = readPtr%fifo_size;
      }
    }
    return val;
  }
  int count() { return (writePtr - readPtr);}
};
票数 0
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1262808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档