2012-03-05 46 views
0

我期待實現一個大小爲10的列表(或任何數據結構),我可以在其中插入一個字符串。當列表已滿時,應自動彈出頭部。我想推動尾巴中的字符串。C++ - 靜態列表從頭部彈出節點時完整

因此,例如,該列表中有這些元素:

「A」 「B」 「C」 「d」 「E」 「F」 「G」 「H」 「I」 「J」

現在如果我叫list.insert( 「K」),名單應該是這樣的:

「B」 「C」 「d」 「E」 「F」 「G」, 「H」「我「」J「」K「

我知道我可能自己創建某種數據結構。但我想知道這樣的事情是否已經存在於C++中?

謝謝你的幫助。

+1

好了,你可以只作簡單的修改了'Queue'。 – noMAD 2012-03-05 23:47:05

回答

0

你可能想這樣做的包裝(適配器)圍繞一個deque:

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)檢查。我想知道是否有更有效的方法來做到這一點? – 2012-03-06 00:08:16

+0

@PiyushGadigone:是的,我現在擁有它的方式,你會在每次插入時進行檢查。如果你真的想擺脫這種情況,你可以做一個真正的循環緩衝區,通常使用模運算符來避免測試,但即使這樣也不會改變這種情況(你仍然需要更新索引/指向next_item的指針當且僅當緩衝區已滿時 – 2012-03-06 00:11:17

+0

@PiyushGadigone - 單個if'的成本非常小,比較它的內存分配。 – 2012-03-06 00:15:20