2

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

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

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

(允许使用 C++11 之前的任何内容;STL/stdlib 和 Boost 是首选)

4

1 回答 1

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;
于 2012-11-01T00:44:07.877 回答