0

我已经开始进行自己的“数组结构”编码,但想知道是否有人知道已经存在的库或模板,用于在内存受限的硬件上进行密集的数据转换。

我想我正在寻找的是一种“内存中”容器,它允许我将插入排队直到一个同步点,并在迭代中“删除”。它不必是实际的删除(带有移动东西的开销),标记为已删除也可以。此外,为了缓存预热等性能,容器可能在很大程度上必须是连续的。连续块而不是完全连续块也可以,但是基于链表的容器不会因为内存或速度而减少它,因为数组通常由非常小的元素组成。

这就是为什么我假设某种表类适合,因为容器就像一个按主键排序的表。

虽然意义很好,但使用 std::vector 的想法实际上是不可能的,因为在迭代期间删除某些内容会因为访问数组的末尾和开头(计数)而弄乱缓存。

此外,没有理由不能对相同的数据进行多个迭代器的操作,因此将交换作为删除操作会导致其他迭代器跳过某些元素。这就是我提到排队插入的原因。

插入和删除改变了容器的形状,所以我假设它们可以通过同步操作来处理,但是插入删除的动作可以在当前内容的迭代过程中排队。

4

1 回答 1

3

和中间迭代“删除”。它不一定是实际的删除

您可以使用 a std::vector,但不是在中间擦除,您只需与最后一个元素交换然后擦除它:

#include <algorithm>

template <typename T>
void cheap_erase(std::vector<T>& vec, size_t index)
{
    using std::swap;
    swap(vec[index], vec.back());
    vec.pop_back();
}
于 2010-06-29T09:51:48.873 回答