【发布时间】:2012-03-16 13:23:14
【问题描述】:
有没有一种可以容纳任何 POD 的向量?类似:
anyvector v;
v.push_back<int>(1);
v.push_back<somestruct>({1, 2, 3});
并通过以下方式访问它:
int a = v.get<int>(0);
somestruct b = v.get<somestruct>(1);
我知道保存每个元素的偏移量必须有开销,但它应该小于我当前的解决方案vector<boost::any> 的开销。
我需要的操作是插入到末尾、从末尾删除和随机访问。
我知道实施一个不是问题,只是询问是否有现成的。
编辑:使用指针存储数据(boost::any、boost::variant)的解决方案比使用线性存储的开销更大,而这正是我正在寻找的。p>
【问题讨论】:
-
@megabyte1024:正如我所说,这是我目前的解决方案,但每个都带有一个指针,这对线性存储来说是一个巨大的开销。
-
如果您使用的是 Qt,则为 QVariant。首先集中精力制作一个 Any-Type-Variable(Any、Variant、QVariant),然后将其放入向量中,然后简单地在该类型上使用 std::vector。
-
你可以使用不同的编程语言吗?好像你是Greenspunning (c:
-
@steaanv:你说的是假的。考虑一个字节数组,其中包含端到端放置的不同大小的结构,加上一个
size_t数组,其中依次包含每个元素的偏移量。这没有与任何最大大小相关的“大”内存开销,开销是每个元素一个偏移量。它在访问期间确实具有恒定的复杂性,它是O(1)双重间接。最后插入是摊销O(size of the new element),最后取出是O(1)。我认为 Dani 知道这是可以做到的,并且知道如何做到这一点,问题是是否有一个 prêt-à-porter。