我有一个消费应用程序需要在列表中存储最多100个对象以提供给回调进行处理,因为如果消费者没有赶上,保留旧数据将是多余的.当新数据到达时,它可以简单地覆盖最旧的元素.
我正在考虑使用循环缓冲容器并猜测它将是deque,但发现它不使用循环列表,以及没有选项来设置固定的最大大小.
出队时有一个max_size方法,但文档说"这是容器因系统或库实现限制而可以达到的最大可能大小."
我可以使用其他容器吗?
PS:我使用的是Visual C++ 2010 express
GMa*_*ckG 16
没有标准的库容器可以直接执行您想要的操作.但是,您应该看看Boost的循环缓冲容器.如果你不能使用Boost,你至少可以查看它的来源并重做它.
wil*_*ell 13
std::vector<T> vec(size);
vec[i % size] = newelem;
Run Code Online (Sandbox Code Playgroud)
为什么不直接使用索引在每次添加新对象时递增 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)
无论如何,类似这样的事情。
归档时间: |
|
查看次数: |
13635 次 |
最近记录: |