簡體   English   中英

哪個STL C ++容器用於固定大小列表?

[英]Which STL C++ container to use for a fixed size list?

我有一個使用中的應用程序,該應用程序最多需要在列表中存儲100個對象才能饋送給回調進行處理,因為如果使用者不及時處理,則保留舊數據將是多余的。 當新數據到達時,它可以簡單地覆蓋最舊的元素。

我當時在考慮使用循環緩沖區容器,並猜測它將是雙端隊列,但發現它不使用循環列表,也沒有設置固定最大大小的選項。

出隊中有一個max_size方法,但是文檔說:“這是由於系統或庫的實現限制,容器可以達到的最大潛在大小。”

我還能使用其他容器嗎?

PS:我正在使用Visual C ++ 2010 Express

沒有標准庫容器可以直接執行您想要的操作。 但是,您應該看一下Boost的圓形緩沖區容器 如果您不能使用Boost,則至少可以查看其來源並重做。

boost :: circular_buffer 然后有

std::vector<T> vec(size);
vec[i % size] = newelem;

為什么不只使用索引在每次添加新對象時使mod 100遞增的向量?

    #define NUM_ELTS 100
    template < typename T >
    class CircularVector
    { 
    public:
       CircularVector() : idx(0)
       {
          vec = vector<T>(NUM_ELTS);
       }
       void push_back(T& elt)
       {
          vec[ idx++ % NUM_ELTS ] = elt;
       }
    private:
       int idx;
       vector<T> vec;
    };

無論如何,這樣的事情。

我通常使用鏈接列表來滾動自己的循環緩沖區(我想這將是“列表” stl容器)。 除非您需要大量隨機訪問元素,否則此方法效果很好。 您可以編寫一個包含鏈表的類並自己維護大小(如果size> threshold {remove element at front},則在后面添加元素,等等)。 您還可以通過維護和包裝頭尾索引來制作具有正常數組/向量的循環緩沖區,但是使用GMan提到的boost可能會更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM