2012-03-05 6 views
0

文字列を挿入できるサイズ10のリスト(または任意のデータ構造体)を実装しようとしています。リストがいっぱいになると、自動的に頭が出るはずです。私は尾を引っ張りたいC++ - 完全なときに頭部からノードをポップする静的リスト

そこで、例えば、リストは、その中にこれらの要素を有する。

"A" "B" "C" "D" "E" "F" "G" "H" "I"、 "J"

を "B" "C" "D" "E" "F" "G" "H"「I:今はlist.insert( "K")を呼び出した場合、リストは次のようになり

"" J "" K "

私はおそらく自分でいくつかの種類のデータ構造を構築することができます。しかし、私はこのようなものが既にC++に存在するかどうか疑問に思っていますか?

ありがとうございました。

+1

さて、あなただけの 'Queue'に簡単な変更を加えることができます: これについて簡単にGoogleは、ブーストの実装を提供します。 – noMAD

答えて

0

おそらく、両端キューのラッパー(アダプタ)としてこれをしたいと思います:

template <class T> 
class fixed_queue { 
    std::deque<T> items; 
    typedef std::deque::size_type size_type; 
    size_type max_size; 
public: 
    fixed_queue(size_type m) max_size(m) {} 

    void insert(T const &t) { 
     items.insert(t); 
     if (items.size() > max_size) 
      items.erase(0); 
    } 

    // other stuff here to give whatever access to the contents you need/want. 
}; 
+0

それは、すべての挿入に対してif(items.size()> max_size)チェックを実行する必要があることを意味します。私はこれを行うより効率的な方法があるのだろうかと思っていますか? –

+0

@PiyushGadigone:はい、現時点では、挿入するたびにチェックを行います。あなたが本当にそれを取り除くことになっているなら、通常はモジュラス演算子を使用してテストを避ける真の循環バッファを行うことができますが、それでも状況はそれほど変わりません(インデックスを更新する必要があります/挿入時のnext_itemへのポインタ –

+0

@PiyushGadigone - 単一の 'if'のコストは、これが行うメモリ割り当てと比較して、計り知れないほど小さいです。 –

関連する問題