c ++:循环缓冲区,整数索引作为迭代器?

时间:2012-10-31 22:46:43

标签: c++ boost stl c++11 circular-buffer

我正在编写一个C ++应用程序,我需要缓存最后到达的 n 消息。我需要一种方法来获取最后一条消息的索引,以便我以后可以找出之后到达的所有消息。由于此索引必须通过HTTP向前和向后传输,因此它应该易于表示和检查,因为它可能成为可能不安全的用户内容。

到目前为止,我一直在考虑使用boost::circular_buffer。但我无法找到除迭代器之外的最新条目的索引。

那么有没有办法(有效地)获得整数索引? 或者有没有办法将迭代器编码和解码成一个可以节省验证的字符串? 或者甚至是一种我没想到的完全不同的方式?

(允许任何高达C ++ 11; STL / stdlib和Boost高度优先)

1 个答案:

答案 0 :(得分:3)

如果您不关心从缓冲区中删除项目,直到它们被新数据覆盖,使用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;