2012-03-19 61 views
6

是否有一些「標準」容器(STL,boost)可以將多個內存塊呈現爲單個連續的內存塊?我需要一些數據來工作下列條件:容器將多個內存塊呈現爲單個連續的內存塊

  • 數據的總大小是事先不知道的(網絡響應)
  • 內存在大塊來分配(與一些外部配置的功能,這是我無法控制的)
  • 內存釋放不是由我控制的,所以重新分配是比較昂貴的

因此,讓所有的數據後,我有內存塊的列表。我需要將一些STL算法(搜索,複製等)作爲一個整體應用於數據。有一個解決方案來編寫容器來保存有關這些塊+前向迭代器的信息,該迭代器可以從一個塊跳轉到另一個塊。

但問題看起來相當普遍,所以我希望有一些我很想知道的答案。提前致謝。

回答

4

你說,內存提供給你。這聽起來像你不想複製它。沒問題,STL哲學非常靈活。你實際上並不需要一個容器;他們只是在那裏進行內存管理,而這已經得到了照顧。

做什麼需要的是一個迭代器。沒有標準的;你必須自己寫一個。爲此提供了一個標準解決方案。但別擔心,這很容易。如果您繼承了std::iterator<value_type>,您將獲得必要的typedef,因此您只需要編寫operator*(簡單明瞭)和operator++/operator--/operator+/operator-(瞭解大塊)。

+0

我完全同意我需要一個迭代器,我已經提到它作爲一個可能的解決方案。但是使用沒有容器的迭代器對我來說看起來很奇怪。因爲我應該以某種方式獲得我的'begin()'和'end()',所以將這些東西封裝在容器中看起來很自然。也許詞_container_在這裏被我濫用。我不是在談論STL容器的概念,而是關於一些「包容器」,用於封裝它們的單獨的塊。我只是希望自己不要實施這些東西。無論如何,謝謝你的回答。 – 2012-03-20 04:07:54

+0

「_Container_」在C++中有很好的定義(這是標準的第23章)。 – MSalters 2012-03-20 08:24:29

0

因此,讓所有的數據後,我有內存塊的列表。我需要將一些STL算法(搜索,複製等)作爲一個整體應用於數據。有一個解決方案來編寫容器來保存有關這些塊+前向迭代器的信息,該迭代器可以從一個塊跳轉到另一個塊。

這聽起來像你需要一個迭代器,無縫地遍歷所有的塊。 std::deque<>提供了一個類似的迭代器,因爲它也分塊分配內存。

除非你真的需要它在一塊連續的內存塊中。在這種情況下,所有的塊都需要複製到一個連續的內存中。