シンプルで効率的な循環バッファ/キューが必要です。私はstd::vector
を使用している場合は、私がこれを行う必要があります:効率的な循環リスト
if (v.size() >= limit) {
std::vector<int> it = v.begin();
v.insert(it, data);
v.erase(it+1);
}
を任意の簡単な解決策はありますか?
シンプルで効率的な循環バッファ/キューが必要です。私はstd::vector
を使用している場合は、私がこれを行う必要があります:効率的な循環リスト
if (v.size() >= limit) {
std::vector<int> it = v.begin();
v.insert(it, data);
v.erase(it+1);
}
を任意の簡単な解決策はありますか?
バッファのサイズを維持して、古いアイテムを上書きします。時間の経過とともに古いものを上書きするだけです。 nItems <が制限されている場合に対処する必要がある場合は、これを処理する必要があります。これは、モジュロを使用して固定サイズのバッファに挿入する単純な例です。
std::vector<int> data(10);
for (int i = 0 ; i < 100 ; ++i)
{
data[i%10] = i;
}
for (std::vector<int>::const_iterator it = data.begin() ; it !=data.end(); ++it)
{
std::cout << *it << std::endl;
}
この挿入方法は、最後の10個の要素をバッファに保持します。
std :: dequeを試してください。インタフェースはstd :: vectorを使うのと似ていますが、最初と最後に挿入と削除が効率的です。あなたがstd::array
を使用しなければならない固定サイズの代替のためのc++11
で
:ベクトル*:
const unsigned int BUFFER_SIZE = 10;
std::array<int, BUFFER_SIZE> buffer; // The buffer size is fixed at compile time.
for (i = 0; i < 100; ++i) {
buffer[i%10] = i;
}
私はあなたの質問を理解していない...あなたは* STDを使用して循環リストを実装したいですか? – m0skit0
番号。これはstd :: vectorを使った私の実装です。しかしそれは良い考えではありません。挿入してから削除してサイズを固定してください。 – mahmood
http://www.boost.org/doc/libs/1_49_0/libs/circular_buffer/doc/circular_buffer.htmlおそらく? – Bart