是否有一些“标准”容器(STL,boost)可以将多个内存块作为单个连续的容器呈现?我需要在以下条件下处理一些数据:
因此,在获取所有数据后,我有一个内存块列表。我需要将一些STL算法(搜索,复制等)作为一个整体应用于数据。有一个解决方案来写容器来保存关于这些块+前进迭代器的信息,它可以从一个块“跳”到另一个块。
但问题似乎相当普遍,所以我希望有一些我不知道的着名答案。提前谢谢。
答案 0 :(得分:4)
你说,记忆是提供给你的。听起来你不想复制它。没问题,STL的理念非常灵活。你实际上并不需要一个容器;它们只是用于内存管理,而且已经处理好了。
你做需要的是一个迭代器。没有标准的;你必须自己写一个。有太多微小的变化为此提供标准解决方案。但别担心,这很容易。如果从std::iterator<value_type>
继承,则会获得必要的typedef,因此您只需要编写operator*
(直截了当)和operator++
/ operator--
/ operator+
/ {{ 1}}(了解块)。
答案 1 :(得分:0)
我需要一些类似的东西,看完后最终编写我自己的,基于重载[]运算符。对于相关的Q&amp; As,请参阅以下主题;
Can I use the [] operator in C++ to create virtual arrays
Good C++ array class for dealing with large arrays of data in a fast and memory efficient way?
答案 2 :(得分:0)
因此,在获取所有数据后,我有一个内存块列表。我需要将一些STL算法(搜索,复制等)作为一个整体应用于数据。有一个解决方案来写容器来保存关于这些块+前进迭代器的信息,它可以从一个块“跳”到另一个块。
听起来你需要一个迭代器来无缝遍历所有的块。 std::deque<>
提供了类似的迭代器,因为它还以块的形式分配内存。
除非你真的需要它在一个连续的内存块中。在这种情况下,所有块都需要复制到一个连续的内存中。