在访问复杂性、调整大小时重新分配等方面,我想要的是类似于 STL 向量的东西。我希望它支持任意索引范围,例如可以有索引从 -2 到 +7 或从 +5 到 + 的元素10. 我希望能够有效地 push_front。我也想要双向调整大小...
我知道我可以自己写这样的东西,但是如果有一个已经写好的库支持这个,请告诉我。
Deque 非常像一个向量,它支持随机访问和末尾的高效插入,也支持开头的高效插入。
Map 支持基于任意键的访问,你可以有任何你想要的范围,甚至是一个稀疏的数组。对集合的迭代很慢。
Unordered map (tr1) 与 map 类似,只是它支持更好的迭代。
作为一般的经验法则,使用向量(在您的情况下使其适应您想要的行为)并且仅在您有证据表明该向量导致缓慢时才进行更改。
似乎您想要的和向量之间的唯一区别是访问元素所需的偏移量,如果通过重载运算符 [] 或其他东西,您会注意这一点。除非我不明白你所说的双向调整大小是什么意思。
给你,双端矢量
http://dl.dropbox.com/u/9496269/devector.h
用法:
之前保留内存begin()
,使用reserve(new_back_capacity, new_front_capcity);
push_front()
使用时除外,pop_front()
始终squeeze()
保留前容量。
squeeze()
刷新所有未使用的内存
默认namespace; stdext
概念:
在大多数情况下,相当于::std::vector
但具有 push_front 的能力
::std::vector
与(不同于::std::deque
)相比没有性能差异
四个字节的开销相比::std::vector
如果您想要 2 路调整大小等...您可以创建自己的向量类,其中 2 个向量用于 0 和正值,另一个用于负值。
然后只需实现常用函数并添加新函数(例如:push_begin 添加到负索引向量),并更新里面的对应向量。