2

到着した最後のn個のメッセージのキャッシュが必要なC++アプリケーションを作成しています。そして、保存されている最後のメッセージのインデックスを取得して、後で到着したすべてのメッセージを後で把握できるようにする方法が必要です。このインデックスは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 に答える