繁体   English   中英

哪个STL C ++容器用于固定大小列表?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM