はい、再び、私は非常にまっすぐ進む実装に再び来る:循環バッファの実装
// write data always! if buffer is already full, overwrite old data!
void Put(const CONTENT_TYPE &data)
{
buffer[ inOffset++] = data;
inOffset%=size;
// was data overwritten, skip it by increment read offset
if (inOffset == outOffset)
{
outOffset++;
outOffset%=size;
std::cout << "Overwrite" << std::endl;
}
}
CONTENT_TYPE Pull()
{
CONTENT_TYPE data = buffer[ outOffset++ ];
outOffset %= size;
return data;
}
しかし、この単純なアルゴリズムは、バッファのサイズのみ-1 1の要素を利用して! sizeof(要素)バイトを - 私はそれを避けたい場合は
は、私が唯一のsizeof私を無駄に別のカウンタ変数を追加(counter_var)で解決策を見つけました。
Q:メモリを浪費しないソリューションはありますか?それはとてもひどいシンプルに見えますが、私は
備考:-)それをキャッチすることはできません。いくつかのより多くの空のために保護するためのコードの行読み込み、他のものがありますが、これは問題には重要ではありません。アルゴリズムは言語に依存せず、またC++のコード例を与えても、C++のタグは付けられません。
あなたの最初の文章は、これが質問ではなく何かに対する*回答*であると思われるようです。多分あなたはこれを言い直したいと思います。また、言語タグ付けは常に良いアイデアです。 –
@MarcusMüller:最初の文章を変更しました。ここでは言語は重要ではありません。 – Klaus
私は、オフセット変数の1つをサイズ変数に置き換えることでこれを解決できると思います。 – Nicolas