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

C++ 具有任意索引范围的类STL向量,c++,stl,vector,deque,C++,Stl,Vector,Deque,当涉及到访问复杂度、调整大小时的重新分配等时,我想要的是类似于STL vector的东西。我想要它支持任意索引范围,例如,可以有从-2到+7或从+5到+10的索引元素。我希望能够有效地推动你前进。我还想双向调整大小 我知道我自己也可以写这样的东西,但是如果有一个已经编写好的库支持这一点,请告诉我。Deque非常像一个向量,它支持随机访问和结尾的有效插入,也支持开头的有效插入 Map支持基于任意键的访问,您可以拥有任何想要的范围,甚至可以是一个稀疏填充的数组。对集合的迭代很慢 无序映射(tr1)与

当涉及到访问复杂度、调整大小时的重新分配等时,我想要的是类似于STL vector的东西。我想要它支持任意索引范围,例如,可以有从-2到+7或从+5到+10的索引元素。我希望能够有效地推动你前进。我还想双向调整大小


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

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

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

无序映射(tr1)与映射类似,只是它支持更好的迭代


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

Deque非常类似于一个向量,因为它支持随机访问和结尾处的有效插入,也支持开头处的有效插入

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

无序映射(tr1)与映射类似,只是它支持更好的迭代


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

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

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

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


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

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


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

给你,双端向量

用法:

  • 要在
    begin()
    之前保留内存,请使用
    reserve(新的后容量、新的前容量)

  • 除了使用
    push_-front()
    pop_-front()
    squeak()
    时,前电容始终保持不变

  • squesh()
    刷新所有未使用的内存

  • 默认
    名称空间;stdext

概念:

  • 在大多数情况下相当于
    ::std::vector
    ,但具有向前推的能力

  • ::std::vector
    相比没有性能差异(与
    ::std::deque
    不同)

  • ::std::vector


    • 给你,双端向量

      用法:

      • 要在
        begin()
        之前保留内存,请使用
        reserve(新的后容量、新的前容量)

      • 除了使用
        push_-front()
        pop_-front()
        squeak()
        时,前电容始终保持不变

      • squesh()
        刷新所有未使用的内存

      • 默认
        名称空间;stdext

      概念:

      • 在大多数情况下相当于
        ::std::vector
        ,但具有向前推的能力

      • ::std::vector
        相比没有性能差异(与
        ::std::deque
        不同)

      • ::std::vector


      在地图中查找给定的密钥很慢(O(logn))。地图上的迭代速度很快——每个元素摊销0(1)次。看起来deque就是答案。谢谢,我只是不知道集装箱的名称@random_hacker我想要快速随机访问的东西,没有密钥。deques没有比vector更大的内存使用量。它们也不需要在调整大小时复制任何现有元素。您可以将实现视为向量的链接列表。若要添加更多元素(前面或后面),只要在现有节点已满的情况下添加另一个节点即可。@j_random_hacker。在O(N)处的三角形上或在O(N)处的地图上查找什么更快?O(1)并不意味着快,它只是意味着无论集合大小,它都是一样的。@KeithB我已经删除了该信息。在映射中查找给定的键很慢(O(logn))。地图上的迭代速度很快——每个元素摊销0(1)次。看起来deque就是答案。谢谢,我只是不知道集装箱的名称@random_hacker我想要快速随机访问的东西,没有密钥。deques没有比vector更大的内存使用量。它们也不需要在调整大小时复制任何现有元素。您可以将实现视为向量的链接列表。若要添加更多元素(前面或后面),只要在现有节点已满的情况下添加另一个节点即可。@j_random_hacker。在O(N)处的三角形上或在O(N)处的地图上查找什么更快?O(1)并不意味着快,它只是意味着无论O