10

シンプルで効率的な循環バッファ/キューが必要です。を使用する場合std::vector、これを行う必要があります。

if ( v.size() >= limit ) {
    std::vector<int> it = v.begin();
    v.insert( it, data );
    v.erase( it+1 );
}

もっと簡単な解決策はありますか?

4

5 に答える 5

11

古いアイテムを上書きして、バッファのサイズを維持したい。時間が経つにつれて、古いものを上書きするだけです。nItems < limit の場合に対処する必要がある場合は、それに対処する必要があります。これは、モジュロを使用して固定サイズのバッファーに挿入する簡単な例です。

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 個の要素がバッファーに保持されます。

于 2012-03-01T14:00:25.323 に答える
1

Astd::listは よりもリストを作成するためのより簡単な代替手段である可能性がありますstd::vector。もありstd::queueます。

vectorを使用して循環キューを実装しているのに、循環リストの実装方法について質問するのも面白いです。なぜ地図を使わないのですか?

于 2012-03-01T13:06:48.200 に答える
0

std::deque を試してください。インターフェイスは std::vector を使用するのと似ていますが、最初と最後での挿入と削除がより効率的です。

于 2016-05-03T09:15:02.880 に答える