C :带有整数指数作为迭代器的圆形缓冲区
c++: circular buffer with integer indices as iterators?
我正在编写一个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;
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 如何在c++迭代器类型中包装std::chrono
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 对于set上的循环-获取next元素迭代器
- 为什么output_editor Concept不需要output_e迭代器标记
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 使用迭代器时如何访问对象在向量中的位置?
- std::vector::迭代器是否可以合法地作为指针
- 跟随整数索引列表的自定义类迭代器
- 不明白迭代器,引用和指针失效,一个例子
- 我可以使用反向迭代器作为ForwardIt吗
- ESP8266单片机矢量迭代器的C++问题
- 使用迭代器进行合并排序中的一个缓冲区
- 创建一个简单的前向迭代器,该迭代器在循环缓冲区的"end"处自动换行
- C :带有整数指数作为迭代器的圆形缓冲区
- 检测环形缓冲区的无效迭代器
- 如何存储循环缓冲区迭代器的中间值