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

pas*_*ena 7 c++ stl

我有一个消费应用程序需要在列表中存储最多100个对象以提供给回调进行处理,因为如果消费者没有赶上,保留旧数据将是多余的.当新数据到达时,它可以简单地覆盖最旧的元素.

我正在考虑使用循环缓冲容器并猜测它将是deque,但发现它不使用循环列表,以及没有选项来设置固定的最大大小.

出队时有一个max_size方法,但文档说"这是容器因系统或库实现限制而可以达到的最大可能大小."

我可以使用其他容器吗?

PS:我使用的是Visual C++ 2010 express

GMa*_*ckG 16

没有标准的库容器可以直接执行您想要的操作.但是,您应该看看Boost的循环缓冲容器.如果你不能使用Boost,你至少可以查看它的来源并重做它.

  • @Thomas:我明确表示那里什么都没有,并提出了另一种选择.你更喜欢什么,完全没有答案? (22认同)

wil*_*ell 13

boost :: circular_buffer.那就是

std::vector<T> vec(size);
vec[i % size] = newelem;
Run Code Online (Sandbox Code Playgroud)


Mat*_*ips 5

为什么不直接使用索引在每次添加新对象时递增 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;
    };
Run Code Online (Sandbox Code Playgroud)

无论如何,类似这样的事情。