[英]Which STL C++ container to use for a fixed size list?
我有一个使用中的应用程序,该应用程序最多需要在列表中存储100个对象才能馈送给回调进行处理,因为如果使用者不及时处理,则保留旧数据将是多余的。 当新数据到达时,它可以简单地覆盖最旧的元素。
我当时在考虑使用循环缓冲区容器,并猜测它将是双端队列,但发现它不使用循环列表,也没有设置固定最大大小的选项。
出队中有一个max_size方法,但是文档说:“这是由于系统或库的实现限制,容器可以达到的最大潜在大小。”
我还能使用其他容器吗?
PS:我正在使用Visual C ++ 2010 Express
没有标准库容器可以直接执行您想要的操作。 但是,您应该看一下Boost的圆形缓冲区容器 。 如果您不能使用Boost,则至少可以查看其来源并重做。
有boost :: circular_buffer 。 然后有
std::vector<T> vec(size);
vec[i % size] = newelem;
为什么不只使用索引在每次添加新对象时使mod 100递增的向量?
#define NUM_ELTS 100
template < typename T >
class CircularVector
{
public:
CircularVector() : idx(0)
{
vec = vector<T>(NUM_ELTS);
}
void push_back(T& elt)
{
vec[ idx++ % NUM_ELTS ] = elt;
}
private:
int idx;
vector<T> vec;
};
无论如何,这样的事情。
我通常使用链接列表来滚动自己的循环缓冲区(我想这将是“列表” stl容器)。 除非您需要大量随机访问元素,否则此方法效果很好。 您可以编写一个包含链表的类并自己维护大小(如果size> threshold {remove element at front},则在后面添加元素,等等)。 您还可以通过维护和包装头尾索引来制作具有正常数组/向量的循环缓冲区,但是使用GMan提到的boost可能会更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.