C :带有整数指数作为迭代器的圆形缓冲区

c++: circular buffer with integer indices as iterators?

本文关键字:迭代器 缓冲区 整数 指数      更新时间:2023-10-16

我正在编写一个C 应用程序,其中我需要到达的最后一个 n 消息的缓存。我需要一种方法来获取存储最后一条消息的索引,以便稍后可以弄清楚后来收到的所有消息。由于必须将此索引向前和返回HTTP,因此由于它可能成为不安全的用户内容,因此应该容易代表和可检查。

到目前为止,我正在考虑使用boost::circular_buffer。但是我找不到一种方法来找出最新条目的索引,除了迭代器。

所以有办法(有效地)获得整数索引吗?
或者有一种方法可以将迭代器编码和解码为可保存有效的字符串?
甚至我还没有想到的一种完全不同的方式?

(允许使用C 11的任何内容; stl/stdlib并提升高度优先)

如果您不在乎从缓冲区中擦除项目,直到它们被新数据覆盖,那么使用std::vector实施几乎是微不足道的。

std::vector<item> buffer;
buffer.reserve(BUFFER_SIZE);
int next_slot = 0;
// to insert:
if (next_slot >= buffer.size())
    buffer.push_back(new_item);
else
    buffer[next_slot] = new_item;
++next_slot;
if (next_slot >= BUFFER_SIZE)
    next_slot = 0;