在 std 或 Poco 中是否有容器适配器允许指定它的大小以及我可以推送元素的位置,如果它是全新的元素将是添加以代替旧元素(或将添加到最后但第一个元素将被删除,所有其余元素将向后移动一个位置)。
例如想象一下大小为 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/