具有任意索引范围的类STL向量

时间:2009-02-17 09:19:51

标签: c++ stl vector deque

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

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

4 个答案:

答案 0 :(得分:3)

Deque非常像一个向量,因为它支持随机访问和最后的有效插入,并且它还支持在开头有效插入。

Map支持基于任意键的访问,您可以拥有任何所需的范围,甚至是稀疏填充的数组。对集合的迭代很慢。

无序地图(tr1)类似于地图,但它支持更好的迭代。

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

答案 1 :(得分:2)

看起来你想要的和矢量之间的唯一区别就是访问元素所需的偏移量,如果通过重载operator []或其他东西你需要注意。除非我不理解双向调整大小的意思。

答案 2 :(得分: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

  • 相比,四个字节的开销

答案 3 :(得分:0)

如果你想要2路调整等等...你可以创建自己的矢量类,里面有2个矢量 一个用于0和正值,另一个用于负值。

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