c++ - 固定大小的容器,旧元素将被删除

标签 c++ std poco

stdPoco 中是否有容器适配器允许指定它的大小以及我可以推送元素的位置,如果它是全新的元素将是添加以代替旧元素(或将添加到最后但第一个元素将被删除,所有其余元素将向后移动一个位置)。

例如想象一下大小为 3 的容器。

我将 4 个元素 [1, 2, 3, 4] 插入其中,结果我得到了带有 [2, 3, 4] 或 [4, 2, 3] 的容器。

最佳答案

您正在寻找的结构称为循环缓冲区。 C++ 不提供表示这种结构的容器,但是当您使用 vector 作为底层容器时,可以很容易地编写它。

为了了解如何实际实现它,您可以查看 here ,其中 OP 询问了类似的结构,但在 bools 上运行。你的问题和他的问题之间的唯一区别是你实际上需要一个模板化类,所以它看起来像这样:

template <typename T>
class circularBuffer {
   vector<T> data;
   unsigned int lastEntryPos;

   // methods to access "data"
};

您还可以添加第二个模板参数,指示底层 vector 的大小,并在构造函数中设置它:

template <typename T, size_type size>
class circularBuffer {
   // ...
   circularBuffer(): data(size), lastEntryPos(0){};
};

关于c++ - 固定大小的容器,旧元素将被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23833859/

相关文章:

c++ - 在 C++ 中。 (*a).b 和 a->b 有什么区别?

c++ - 忽略 C++ cin 中的逗号

c++ - 互斥锁困惑

entity-framework-5 - 如何从现有数据库生成 POCO 代理

c# - 在游戏/程序运行时创建覆盖屏幕?

c++ - Arduino 中的预定义数组

c# - N 层存储库 POCO - 聚合?

c# - 什么是 POCO Entity Framework

c++ - 以安全的方式从 char* 创建 std::string

c++ - std::bind 如何与成员函数一起工作