【发布时间】:2012-10-31 22:46:43
【问题描述】:
我正在编写一个 C++ 应用程序,我需要缓存最后到达的 n 条消息。而且我需要一种方法来获取存储的最后一条消息的索引,以便以后可以找出所有随后到达的消息。由于该索引必须通过 HTTP 来回传输,因此它应该易于表示和检查,因为它可能成为不安全的用户内容。
到目前为止,我一直在考虑使用boost::circular_buffer。但是除了迭代器之外,我找不到找出最新条目索引的方法。
那么有没有办法(有效地)获取整数索引?
或者有没有办法将迭代器编码和解码成一个可保存验证的字符串?
或者甚至是我还没有想到的完全不同的方式?
(允许 C++11 之前的任何内容;STL/stdlib 和 Boost 高度优先)
【问题讨论】:
-
是否有某些原因必须将其限制为一组数字 n?
std::deque在这里听起来很合适,减去设置的大小。 -
@Griwes 我同意,但由于在标准之前的普遍用法,它经常以白话形式使用。这就是你不在伤口上贴绷带的原因;你用的是该死的创可贴。我尽可能使用“标准库”、“std lib”、“stdlib”,但不要指望这种用法会很快普及。与此同时,放松身心,享受一杯清爽的调味混合饮料,或者我们在这个星球的四个角落称之为 Kool-Aid。
-
要获取索引,您只需减去或使用
std::distance(如果这是您要查找的内容)。 -
这是一个消息数量固定的循环缓冲区吗?如果是这样,使用 std::vector 怎么样?
标签: c++ boost stl c++11 circular-buffer