deque实施细节

时间:2017-02-28 18:11:43

标签: c++ deque

我正在阅读关于deque(Deques

的实现的文章

以下是相应的代码:

 template <class T>
    class deque
    {
    public:
      ⋮
    private:
      size_type theSize;
      T** blockmap;
      size_type mapSize;
      size_type firstBlock;
      size_type firstElement;

      const static size_type BlockSize = 4096;
      static size_type numElementsInBlock;
    };

    template <class T>
    deque<T>::dqPosition  
        deque<T>::indexAt (deque<T>::size_type n) const
    {
      dqPosition pos;
      pos.blockNum = firstBlock;
      if (n < numElementsInBlock - firstElement)
        {
          pos.elementNum = n + firstElement;
        }
      else
        {
          n -= numElementsInBlock - firstElement;
          ++pos.blockNum;
          int k = n / numElementsInBlock;
          pos.blockNum += k;
          pos.elementNum = n - k*numElementsInBlock;
        }
      return pos;
    }

在插图中,很明显firstBlock和firstElement的初始值是2。 为什么firstBlock和firstElement最初不是0?

1 个答案:

答案 0 :(得分:1)

因为每次你想要从前面拿走deque的东西,你不想移动内存或将所有内容移回到位置0.所以你保留了deque的第一个块的索引。 / p>