1

在访问复杂性、调整大小时重新分配等方面,我想要的是类似于 STL 向量的东西。我希望它支持任意索引范围,例如可以有索引从 -2 到 +7 或从 +5 到 + 的元素10. 我希望能够有效地 push_front。我也想要双向调整大小...

我知道我可以自己写这样的东西,但是如果有一个已经写好的库支持这个,请告诉我。

4

4 回答 4

3

Deque 非常像一个向量,它支持随机访问和末尾的高效插入,也支持开头的高效插入。

Map 支持基于任意键的访问,你可以有任何你想要的范围,甚至是一个稀疏的数组。对集合的迭代很慢。

Unordered map (tr1) 与 map 类似,只是它支持更好的迭代。

作为一般的经验法则,使用向量(在您的情况下使其适应您想要的行为)并且仅在您有证据表明该向量导致缓慢时才进行更改。

于 2009-02-17T09:34:31.867 回答
2

似乎您想要的和向量之间的唯一区别是访问元素所需的偏移量,如果通过重载运算符 [] 或其他东西,您会注意这一点。除非我不明白你所说的双向调整大小是什么意思。

于 2009-02-17T09:36:38.853 回答
1

给你,双端矢量

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

于 2011-12-01T08:20:15.097 回答
0

如果您想要 2 路调整大小等...您可以创建自己的向量类,其中 2 个向量用于 0 和正值,另一个用于负值。

然后只需实现常用函数并添加新函数(例如:push_begin 添加到负索引向量),并更新里面的对应向量。

于 2009-02-17T11:38:11.930 回答